

PostgreSQL9.4で複合主キーに設定されているカラムに外部キー制約が設定されたテーブルをCREATEしたいと思っているのですが、どのようにすればよいのでしょうか？

現状、以下のようなSQLを使っています

[code]

    -- attend
    create table attend (
      room_id bigint not null,
      FOREIGN KEY (room_id) REFERENCES rooms(room_id) ON DELETE CASCADE,
      user_id bigint not null,
      FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE SET NULL,
      profile_img varchar(255) not null, -- 冗長だけどパフォーマンス考え
    
      PRIMARY KEY (room_id, user_id)
    );
    
[/code]

実行環境はPlayframework2.3.8でplay-flywayのマイグレーション実行時にSQLのエラーが出ています


CC BY-SA 3.0
2015-04-16T17:25:57.000
9238
2022-03-07T13:01:20.140
2015-04-17T16:12:58.770
4041
4041
question
postgresql
PostgreSQLで複合主キーで使用されているカラムに外部キーを設定する方法


バージョンはちょっと違いますが、9.3では動くようです。

**動作サンプル:**  
<http://sqlfiddle.com/#!15/256d8/1>

[code]

    create table rooms(room_id bigint primary key);
    create table users(user_id bigint primary key);
    create table attend (
      room_id bigint not null,
      FOREIGN KEY (room_id) REFERENCES rooms(room_id) ON DELETE CASCADE,
      user_id bigint not null,
      FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE SET NULL,
      profile_img varchar(255) not null,
      PRIMARY KEY (room_id, user_id)
    );
    
[/code]

[code]

    insert into rooms values (1);
    insert into users values (1);
    insert into attend values (1, 1, '');
    
    select * from attend;
    
[/code]

* * *

この投稿は @unarist
さんの[コメント](https://ja.stackoverflow.com/questions/9238/postgresql%e3%81%a7%e8%a4%87%e5%90%88%e4%b8%bb%e3%82%ad%e3%83%bc%e3%81%a7%e4%bd%bf%e7%94%a8%e3%81%95%e3%82%8c%e3%81%a6%e3%81%84%e3%82%8b%e3%82%ab%e3%83%a9%e3%83%a0%e3%81%ab%e5%a4%96%e9%83%a8%e3%82%ad%e3%83%bc%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95#comment8378_9238)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-01-15T01:13:35.813
73308
2021-01-15T07:47:28.770
2021-01-15T07:47:28.770
3060
9820
9238
answer