我想知道是否可以动态添加自动增量整数字段 ,即不在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 TABLE
或VIEW
(除非我必须)。还有一些关于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
值无论如何都没关系,是否有可以在这里使用的自动增量函数?
答案 0 :(得分:5)
如果您希望id
字段为输出中的每一行分配唯一的整数,请使用row_number()
窗口函数:
select
row_number() over () as id,
t.type from t;
生成的id
在每次执行查询时都是唯一的。多次执行不会为id
生成新的唯一值。