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

外部キーとして列を追加すると、外部キー制約で参照されているERROR列が存在しません

    列に制約を追加するには最初にテーブルに存在する必要がありますPostgresqlには、列の追加と制約の追加を同時に行うために使用できるコマンドはありません。 2つの別々のコマンドである必要があります。 次のコマンドを使用して実行できます:

    最初に行うこと:

    ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;
    

    integerを使用しています ここに入力しますが、idと同じタイプである必要があります auth_userの列 テーブル。

    次に、制約を追加します

    ALTER TABLE links_chatpicmessage 
       ADD CONSTRAINT fk_someName
       FOREIGN KEY (sender) 
       REFERENCES auth_user(column_referenced_name);
    

    ADD CONSTRAINT fk_someName このコマンドの一部は名前付けです 制約があるため、後でモデルを作成するツールを使用して文書化する必要がある場合は、ランダムな名前ではなく名前付きの制約があります。

    また、管理者の目的にも役立つため、DBAは制約がそのテーブルからのものであることを認識します。

    通常、それがどこから来たのか、あなたのケースで参照している場所についてのヒントを付けて名前を付けます。fk_links_chatpicmessage_auth_user したがって、この名前を見た人は誰でも、INFORMATION_SCHEMAで複雑なクエリを実行しなくても、この制約が何であるかを正確に知ることができます。

    編集

    @btubbsの回答で述べたように、実際には1つのコマンドで制約付きの列を追加できます。そのように:

    alter table links_chatpicmessage 
          add column sender integer, 
          add constraint fk_test 
          foreign key (sender) 
          references auth_user (id);
    


    1. MySQLのMAX()とGREATEST():違いは何ですか?

    2. PostgreSQLでのPi()のしくみ

    3. MySQLレプリケーションのトラブルシューティング:パート1

    4. DbVisualizerでのODBCデータの操作