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

auto-increment column in PostgreSQL on the fly?

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

例如,我有一个声明:

1
SELECT 1 AS id, t.type FROM t;

而我可以将其更改为

1
SELECT some_nextval_magic AS id, t.type FROM t;

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

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

- 更新 -

我的动机在这个关于PostGIS扩展的GIS.SE答案中得到了说明。原始查询是:

1
2
3
4
5
6
7
8
9
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值无论如何都没关系,是否有可以在这里使用的自动增量函数?


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

1
2
3
SELECT
    ROW_NUMBER() OVER () AS id,
    t.type FROM t;

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