在INSERT语句中将一列的默认值设置为另一列

bre*_*dan 4 database postgresql

我有一个表,称之为t1,有三个整数列c1,c2,c3.c1的默认值为:

not null default nextval
Run Code Online (Sandbox Code Playgroud)

对于我目前正在进行的INSERT语句,我希望c2具有与将分配给c1相同的值.对于我的大多数插入都不是这种情况,因此将c2定义为具有默认值或在更新时具有触发器没有意义.目前我正在做两个陈述:

INSERT INTO t1 (c3) VALUES (val3);
UPDATE t1 SET c2 = c1 WHERE //Get correct row
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 7

不能保证在其中的一组顺序的元素将被处理.也没有必要进行两次函数调用.使用子选择或CTE:

INSERT INTO t (c1, c2, c3)
SELECT x.s, x.s, val3
FROM  (SELECT nextval('c1_seq') AS s) x;
Run Code Online (Sandbox Code Playgroud)

或者使用CTE:

WITH   x(s) AS (SELECT nextval('c1_seq'))
INSERT INTO t (c1, c2, c3)
SELECT x.s, x.s, val3
FROM   x;
Run Code Online (Sandbox Code Playgroud)