如何在 PostgreSQL 中更改 "REFERENCES"?
How to alter "REFERENCES" in PostgreSQL?
当 table 名称已更改时,如何在 PostgreSQL 中更改对 table 的引用?
假设我有:
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,
table 和/或其他对象之间的内部依赖关系永远不会绑定到对象名称。在内部,每个对象都存储在目录 table 中,对象的 OID(内部主键)用于 一切 其他。
因此,FOREIGN KEY
引用存储在目录 tables pg_constraint
(the constraint itself incl. its name) and pg_depend
中。更改 table 名称 根本不会影响功能。
约束的名称保持不变。您可以忽略它,或者您可能想重命名该约束以使其不会产生误导。
但是,由于您在创建时没有指定约束名称,系统选择了一个默认值,在您的情况下是 example2_example1fk_fkey
,除非该名称已被使用。未引用引用的 table 名称。但是您的示例中的 列名称 也可能必须更改。并且那个用在了约束名
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
在 Postgres 9.2 或更高版本中,您也可以重命名约束(如 ):
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;
当 table 名称已更改时,如何在 PostgreSQL 中更改对 table 的引用?
假设我有:
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,
table 和/或其他对象之间的内部依赖关系永远不会绑定到对象名称。在内部,每个对象都存储在目录 table 中,对象的 OID(内部主键)用于 一切 其他。
因此,FOREIGN KEY
引用存储在目录 tables pg_constraint
(the constraint itself incl. its name) and pg_depend
中。更改 table 名称 根本不会影响功能。
约束的名称保持不变。您可以忽略它,或者您可能想重命名该约束以使其不会产生误导。
但是,由于您在创建时没有指定约束名称,系统选择了一个默认值,在您的情况下是 example2_example1fk_fkey
,除非该名称已被使用。未引用引用的 table 名称。但是您的示例中的 列名称 也可能必须更改。并且那个用在了约束名
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
在 Postgres 9.2 或更高版本中,您也可以重命名约束(如
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;