[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 メーリングリストの案内