【发布时间】:2016-08-19 14:32:26
【问题描述】:
我想知道是否可以动态添加一个自增整数字段,即不在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 或在CREATE TABLE 中使用nextval。但我不一定想使用CREATE TABLE 或VIEW(除非我必须这样做)。也有一些generate_series()的讨论,但我不确定这里是否适用。
-- 更新--
关于 PostGIS 扩展的GIS.SE answer 说明了我的动机。原来的查询是:
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 的值无论如何都无所谓,有没有可以在这里使用的自增函数呢?
【问题讨论】:
-
Postgresql 具有创建序列。你可以从中得到递增的数字。
-
@tinlyx 你能否提供更多关于你需要的唯一性的细节......无论是在查询中本地还是在查询中全局
-
请发布您的代码。您已经待了这么久,知道如何提出正确的问题。根据您的语句的构造方式,有多种解决方案。如果没有更多信息,你只会得到疯狂的预感。
-
您需要整数吗?如果不是 md5(row_to_json(x)::text) 将用作密钥(或某种 pg_crypto 哈希)
-
@JoeLove 和 Patrick,请查看我关于用例/要求的更新。
标签: postgresql