[pgsql-jp: 34539] 外部キーを追加できない

SAISHO Kazuhiro ml @ saisho.info
2004年 12月 25日 (土) 07:14:31 JST


税所と申します。
お世話になっております。

さて、実際には複雑なリレーションなのですが、
問題の部分だけ書き出すと次のような表になっています。

create table gyomu."顧客リスト" (
    "顧客ID"       text primary key,
    "請求書送付先" text
);

ここで、

alter table gyomu."顧客リスト"
    add constraint "請求書送付先"
    foreign key ("請求書送付先")
    references gyomu."顧客リスト" ("顧客ID")
    on delete cascade
    on update cascade
    deferrable;

を実行すると、次のエラーになります。

ERROR:  insert or update on table "顧客リスト" violates foreign key 
constraint "請求書送付先"
DETAIL:  Key (請求書送付先)=() is not present in table "顧客リスト".

但し、上記の単純なモデルをそのまま行なっただけではエラーは再現できません。
実際には、"顧客ID"と"請求書送付先"のデータ型はもともとint型で、
表の作成時には"請求書送付先"の列の制約として外部キーが設定されていました。
更に、"顧客ID"は他の多数の表からも参照されていました。
"顧客ID"のデータ型をintからtextに変更するために、制約を削除したり、
新しい列を追加して値をコピーして旧い列を削除してリネームしたり、
制約を再度追加したり、・・・とやっているうちにエラーになってしまいました。
上記のエラーメッセージはどういうエラーなのでしょうか?
pg_constraintを見る限りでは"顧客リスト"の表に外部キーは設定されていません。

なお、他の表から参照するための外部キーは同様のSQL文で問題なく設定できます。
例えば、次のようなものはエラーになりません。
alter table gyomu."訪問履歴"
    add constraint "顧客ID"
    foreign key ("顧客ID")
    references gyomu."顧客リスト" ("顧客ID")
    on delete cascade
    on update cascade
    deferrable;

環境は、
FreeBSD 4.9-RELEASE-p4
PostgreSQL 7.4.2
バックエンドはUNICODEでSQL文はUTF-8で実行しています。

宜しくお願い致します。

--
税所 一弘 <ml @ saisho.info>




pgsql-jp メーリングリストの案内