PostgreSQL中的自动增量列在运行中?

时间:2016-04-26 00:40:58

标签: postgresql

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

例如,我有一个声明:

SELECT 1 AS id, t.type FROM t;

我可以将其更改为

SELECT some_nextval_magic AS id, t.type FROM t;

我需要在some_nextval_magic部分动态创建自动增量字段,因为在构建更大的SQL语句期间结果关系是临时id字段的值并不重要,只要它是唯一的。

我在这里搜索,相关问题的答案(例如PostgreSQL Autoincrement)主要涉及在SERIAL中指定nextval或使用CREATE TABLE。但我不一定要使用CREATE TABLEVIEW(除非我必须)。还有一些关于generate_series()的讨论,但我不确定它是否适用于此。

- 更新 -

我的动机在GIS.SE answer中有关PostGIS扩展的说明。原始查询是:

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;

其中g.path[1] as gid是“QGIS中可视化所需的id字段”。我认为唯一的要求是整个表格中的整数唯一。当g.path[]数组为空时运行上述查询时遇到了一些错误。

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

由于gid值无论如何都没关系,是否有可以在这里使用的自动增量函数?

1 个答案:

答案 0 :(得分:5)

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

select 
    row_number() over () as id, 
    t.type from t;

生成的id在每次执行查询时都是唯一的。多次执行不会为id生成新的唯一值。