gpt4 book ai didi

postgresql - 如何在 PostgreSQL 中更改 "REFERENCES"?

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

当表名已更改时,如何在 PostgreSQL 中更改对表的引用?

假设我有:

CREATE TABLE example1 (
id serial NOT NULL PRIMARY KEY,
name varchar(100)
);

CREATE TABLE example2 (
id serial NOT NULL PRIMARY KEY,
example1fk integer REFERENCES example1 (id) DEFERRABLE INITIALLY DEFERRED
);

稍后我会:

ALTER TABLE example1 RENAME TO example3; 

如何改变外键约束的定义?

example1fk integer REFERENCES example1 (id) DEFERRABLE INITIALLY DEFERRED,

最佳答案

表和/或其他对象之间的内部依赖关系永远不会绑定(bind)到对象名称。在内部,每个对象都存储在目录表中,对象的 OID(内部主键)用于一切其他。

因此,FOREIGN KEY 引用存储在目录表中 pg_constraint (约束本身,包括其名称)和 pg_depend .更改表名根本不会影响功能

约束的名称 保持不变。您可以忽略它,或者您可能想要重命名该约束以使其不至于产生误导。

但是,由于您在创建时没有指定约束名称,系统选择了一个默认值,在您的情况下为 example2_example1fk_fkey 除非名称已被使用。没有对引用的 名称的引用。但是您的示例中的列名称 也可能需要更改。并且 that 用于约束名称。

ALTER TABLE example2 RENAME example1fk TO example3fk;  -- rename column

在 Postgres 9.2 或更高版本中,您也可以重命名约束(如 dequis commented ):

ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;

在旧版本中,您必须删除并重新创建约束以重命名它,最好在单个语句中:

ALTER TABLE example2  -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;

Details in the manual.

关于postgresql - 如何在 PostgreSQL 中更改 "REFERENCES"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31414462/

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