[pgsql-jp: 33730] Re: 外部キーの削除について
FUKUSHIMA Katsuaki
kfukushima @ sis.seino.co.jp
2004年 7月 21日 (水) 23:43:28 JST
福島です。
> 外部キーを以下のように作成しています。
> CREATE TABLE SAMPLE_B(
> ID CHAR(40) NOT NULL,
> FOREIGN KEY(ID) REFERENCES SAMPLE_B(ID)
> );
う〜ん、これは通りそうにないですね。
CREATE TABLE SAMPLE_A(
ID CHAR(40) NOT NULL PRIMARY KEY
);
CREATE TABLE SAMPLE_B(
ID CHAR(40) NOT NULL,
FOREIGN KEY(ID) REFERENCES SAMPLE_A(ID)
);
上記の想定でよろしいでしょうか?
> この外部キーを削除したいのですが、CONSTRAINTを省略してい
> るためテーブル制約名がわかりません。
> マニュアルにはシステムが名前を生成すると書いてあるのでが
> どこに定義されているかが不明です。
システムカタログを参照しましょう。現在手元に PostgreSQL を実行できる環
境が無いため間違っているかもしれませんが、
select * from pg_constraint where conrelid in (select relfilenode from
pg_class where relname = 'sample_b');
で、sample_b テーブルに設定されている制約の一覧が表示されると思います。
pg_class や pg_constraint システムカタログの内容については、ドキュメン
トを参照ください。
この中で contype が f な物の conname で alter table すればよろしいか
と思います。
---------------------------------------------------------
FUKUSHIMA Katsuaki at Seino Information Service Co., Ltd.
e-mail kfukushima @ sis.seino.co.jp
pgsql-jp メーリングリストの案内