gpt4 book ai didi

sql - 具有外键约束时更改主键类型

转载 作者:行者123 更新时间:2023-11-29 13:57:49 25 4
gpt4 key购买 nike

我有一个包含元素的表格:

SGA
----
Pk | Integer (PRIMARY KEY)

and it has 3 - 4 relations
SB1
----
FK1 | Integer (references PK)


SB1
----
FK1 | Integer (references PK)


SB2
----
FK2 | Integer (references PK)


SB3
----
FK3 | Integer (references PK)

我想将 PK 的类型更改为文本,但它给出了约束错误(这是显而易见的)。是否有 SQL 命令,以便我也可以在其他表上反射(reflect)更改。

到目前为止,数据库中没有任何值,并且正在构建数据库。

最佳答案

您必须像这样显式更新每个表,没有快捷方式 SQL:

ALTER TABLE child DROP CONSTRAINT constraint_name ;
ALTER TABLE child ALTER COLUMN fk_col TYPE new_type;
ALTER TABLE parent ALTER COLUMN pk_col TYPE new_type;
ALTER TABLE child ADD CONSTRAINT constraint_name
FOREIGN KEY fk_col REFERENCES parent(pk_col);

例如:

create temp table foo( i integer primary key);
create temp table bar ( foo_i integer references foo(i) );
insert into foo values (1),(2),(3);
insert into bar values (1),(2),(2);

ALTER TABLE bar DROP CONSTRAINT bar_foo_i_fkey;
ALTER TABLE bar ALTER COLUMN foo_i TYPE text USING 'NUM:'||foo_i;
ALTER TABLE foo ALTER COLUMN i TYPE text USING 'NUM:'||i;
ALTER TABLE bar ADD CONSTRAINT bar_foo_i_fkey
FOREIGN KEY (foo_i) REFERENCES foo(i);

USING 是可选的,仅当您想要在更改类型时进行某种翻译或者 postgres 不知道如何翻译它们时才需要。

关于sql - 具有外键约束时更改主键类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050549/

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