链接示例显示了如何使用同一表的标识列的值初始化一列。
这在 Postgres 中是可能的
create table identdefault
(
a serial not null,
b int not null default currval('identdefault_a_seq')
);
serial 将在后台创建一个名为tablename_column_seq 的序列,因此我们知道identdefault.a 的序列将命名为identdefault_a_seq,我们可以通过currval 函数访问最后一个值。
跑步:
insert into identdefault default values;
insert into identdefault default values;
insert into identdefault default values;
select *
from identdefault
将输出:
a | b
--+--
1 | 1
2 | 2
3 | 3
这似乎只适用于 Postgres 9.4,当我尝试使用 9.3(在 SQLFiddle 上)时出现错误。但在这种情况下,它也是可能的——您不能使用“快捷方式”serial,而是需要显式创建序列:
create sequence identdefault_a_seq;
create table identdefault
(
a int not null default nextval('identdefault_a_seq'),
b int not null default currval('identdefault_a_seq')
);
insert into identdefault default values;
insert into identdefault default values;
insert into identdefault default values;
如果你想有一个与serial列相同的定义,你只需要使序列属于该列:
alter sequence identdefault_a_seq owned by identdefault.a;
SQLFiddle:http://sqlfiddle.com/#!15/0aa34/1
不幸的是,对于更广泛的问题“如何将 B 列的默认值设置为 A 列中的值?”的答案是:否,您可以't(见克林的评论)