sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでREFERENCESを変更するにはどうすればよいですか?

    テーブルや他のオブジェクト間の内部依存関係がオブジェクト名にバインドされることはありません。内部的には、すべてのオブジェクトがカタログテーブルに格納され、オブジェクトの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;
    

    詳細はマニュアルに記載されています。




    1. CHECK制約を作成しようとしたときのORA-00907

    2. Python FlaskとMySQLを使用してゼロからWebアプリを作成する:パート3

    3. Heroku上のPostgreSQLアプリとDjangoが同期していない

    4. 演算子以上のMySQLは、その義務以上を無視しています