テーブルや他のオブジェクト間の内部依存関係がオブジェクト名にバインドされることはありません。内部的には、すべてのオブジェクトがカタログテーブルに格納され、オブジェクトのOID(内部主キー)がすべてに使用されます。 それ以外の場合。
したがって、FOREIGN KEY
参照はカタログテーブルに保存されますpg_constraint
(制約自体にはその名前が含まれます)および pg_depend
。テーブル名を変更しても機能が損なわれることはありません 。
名前 制約のは変更されません。それを無視することも、誤解を招かないように制約の名前を変更することもできます。
ただし、作成時に制約名を指定しなかったため、システムはデフォルトを選択しました。これはexample2_example1fk_fkey
です。 あなたの場合、名前が取られていない限り。参照されているテーブルへの参照はありません 名前。ただし、列名 あなたの例でも変更する必要があるでしょう。そしてそれ 制約名に使用されます。
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
Postgres 9.2以降では、制約の名前を変更することもできます(コメントされた質問 ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
古いバージョンでは、制約を削除して再作成し、名前を変更する必要があります。1つのステートメントで行うのが最適です。
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;