2008年4月22日

[pgsql-jp: 39346] Re:外部キーにおけるデータ型の相違


"EBIHARA, Yuichiro" <ebihara@xxxxx> wrote:

> 参照性合成制約とデータ型に関する質問です。
> 8.3では以下の通りエラーになります。
>
> ERROR: foreign key constraint "child_fk" cannot be implemented
> DETAIL: Key columns "parent_id" and "id" are of incompatible types:

> numeric and integer.
>
> これは8.3における仕様変更の影響でしょうか?
> 8.3のリリースノートの以下の記述が当てはまっているように見えますが。
> 「外部キーはデータ型をまたがる参照においてインデックス付け可能な状態に一致しなければならなくなりました。(Tom)
> これは意味的な一貫性を向上させ、また、性能に関する問題を防止する役に立ちます。 」

そうです。
今回のケースでは、「意味的な一貫性」は特に問題ありませんが、
「性能に関する問題」として、integer ⇔ decimal 間で
意図しないキャストが発生し、インデックスが使われない可能性があります。
トラブルを未然に防ぐため、型を揃えることが強制されるようになりました。

ALTER TABLE child ALTER COLUMN parent_id TYPE integer;
などを使って、列の型を変更してはいかがでしょうか。
(この処理の間は、排他ロックが必要です)

------------------------------------------------------------
板垣貴裕 <itagaki.takahiro@xxxxx>


投稿者 xml-rpc : 2008年4月22日 12:20
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/72394
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。