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