[pgsql-jp: 37525] 継承元テーブルに対する制約のダンプ・リストアについて
武田憲太郎
takeda @ youmind.jp
2006年 9月 8日 (金) 20:57:36 JST
武田と申します。
pg_dumpまわりで、ちょっと気になることを発見致しまして、
投函させて頂きました。(pg_dumpのバグのような気もします…)
環境は、Linux版のPostgreSQL8.1.3/8.1.4です。
コンパイルオプションは無指定です。
以下の通りテーブルを定義します。
# CREATE TABLE a(a INT);
# CREATE TABLE b(b INT) INHERITS (a);
# ALTER TABLE ONLY a ADD CONSTRAINT check_a CHECK(a <> 0) ;
# ALTER TABLE b ADD CONSTRAINT check_b CHECK(a <> 1) ;
テーブルbの内容を確認します。
# \d b
Table "public.b"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
b | integer |
Check constraints:
"check_b" CHECK (a <> 1)
Inherits: a
ここまで想定する動作です。
ところが、ここから、ダンプ⇒リストアを行うと、
制約の定義が正しく復元されません。
$ pg_dump -c | psql
# \d b
Table "public.b"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
b | integer |
Check constraints:
"check_a" CHECK (a <> 0) -- check_a定義の際のONLYが無視されてます
"check_b" CHECK (a <> 1)
Inherits: a
コメント部分に、想定しない制約が追加されてしまうため、
状況によっては復元が不能なダンプデータが生成されてしまいます。
こちら、回避方法などをご存知の方、いらっしゃいませんでしょうか?
宜しくお願い申し上げます。
pgsql-jp メーリングリストの案内