gpt4 book ai didi

postgresql - 如何将 B 列的默认值设置为 PostgreSQL 中 A 列的值?

转载 作者:行者123 更新时间:2023-11-29 12:32:58 25 4
gpt4 key购买 nike

如何将 B 列的默认值设置为 A 列中的值?

我知道,在 Microsoft SQL Server 中是可能的:

http://www.ideaexcursion.com/2010/04/19/default-column-value-to-identity-of-different-column/

PostgreSQL 中可以吗?

最佳答案

链接示例显示了如何使用同一表的标识列的值初始化一列。

这在 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(见克林的评论)

关于postgresql - 如何将 B 列的默认值设置为 PostgreSQL 中 A 列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com