在PostgreSQL中自动增加列数?

tin*_*lyx 2 postgresql

我想知道是否可以即时添加自动递增整数字段,即无需在CREATE TABLE语句中定义它?

例如,我有一条声明:

SELECT 1 AS id, t.type FROM t;
Run Code Online (Sandbox Code Playgroud)

我可以将其更改为

SELECT some_nextval_magic AS id, t.type FROM t;
Run Code Online (Sandbox Code Playgroud)

我需要在some_nextval_magic零件中动态创建自动递增字段,因为结果关系是在构建更大的SQL语句期间的临时关系。id只要它是唯一的,字段的价值就不是很重要。

我搜索在这里,答案和相关问题(如PostgreSQL的自动增量)大部分涉及指定SERIAL或使用nextvalCREATE TABLE。但我不一定要使用CREATE TABLEVIEW(除非必须)。也有关于的讨论generate_series(),但不确定在这里是否适用。

-更新-

在有关GIS扩展的GIS.SE答案中说明了我的动机。原始查询为:

CREATE VIEW buffer40units AS
SELECT 
   g.path[1] as gid, 
   g.geom::geometry(Polygon, 31492) as geom 
FROM
   (SELECT 
     (ST_Dump(ST_UNION(ST_Buffer(geom, 40)))).* 
   FROM point
) as g;
Run Code Online (Sandbox Code Playgroud)

g.path[1] as gidid字段在哪里,“在QGIS中进行可视化所需”。我相信唯一的要求是它在表中是整数唯一。当g.path[]数组为空时,运行上述查询时遇到一些错误。

在尝试修复上述查询中的数组时,我想到了这个想法:

由于该gid值无所谓,因此这里可以使用自动递增功能吗?

don*_*mus 5

如果希望有一个id字段为输出中的每一行分配一个唯一的整数,请使用row_number()窗口函数:

select 
    row_number() over () as id, 
    t.type from t;
Run Code Online (Sandbox Code Playgroud)

所生成的id仅在每次查询执行期间是唯一的。多次执行不会为生成新的唯一值id