我有一个表,其中一列是自动递增序列号。我也希望将相同的值存储在另一列中(以便以后可以更改)。
我的表结构是这样的:
CREATE TABLE Test
(
test_id integer NOT NULL DEFAULT nextval('test_id_seq'::regclass),
...
...
uid integer not null DEFAULT currval('test_id_seq'::regclass),
)
我想要uid = test_id
,但问题是在一个会话中插入多行时。然后currval
不采用正确的ID。
我不想使用触发器。我该如何管理它?
为了完全不依赖
currval
,您可以按照以下模式系统地转换 INSERT 查询:从选择中插入,而不是:
插入测试(列)从...中选择列;
考虑这种形式:
VALUES
对于子句中的单行,而不是考虑:
对于具有多行的 VALUES 子句,而不是:
考虑:
如果 PostgreSQL 有一个符合标准的 NEXTVAL,你可以不用子查询而只使用类似的东西:
并且
NEXT VALUE FOR seqname
按照标准的要求,对于同一输出行的两列,它将评估为相同的值。但是 PostgreSQL 没有这个结构。