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