[pgsql-jp: 41745] Re: 8.4.8 → 9.1.6 へのバージョンアップ後の oid 不整合について
Shigeru HANADA
hanada @ metrosystems.co.jp
2014年 11月 11日 (火) 12:51:58 JST
花田です。
(2014/11/11 12:23), 園田 真樹 wrote:
> すると、ユーザーテーブルのコメントを取得する以下のクエリを実行すると
> 結果が0件となります。
> (pg_description を select すると、コメントは挿入されています)
>
> SELECT
> DESCRIPTION
> FROM
> PG_ATTRIBUTE
> JOIN PG_CLASS ON ATTRELID=RELFILENODE
> JOIN PG_DESCRIPTION
> ON RELFILENODE=OBJOID AND ATTNUM=OBJSUBID;
このSQLの結合キーが間違っています。pg_attribute.attrelidや
pg_description.objoidと一致するのはpg_class.relfilenodeではなく、
pg_class.oidです。結合キーの対応関係は、「参照先」という項目で、マニュア
ルの「システムカタログ」セクションに載っています。
http://www.postgresql.jp/document/9.1/html/catalog-pg-attribute.html
relfilenodeはそのリレーションのファイル名に使われる数字で、TRUNCATEや
CLUSTERなどのコマンドで変化します。テーブル作成直後はoidと同じ値なので、
上記のSQLはそれらの操作をするまではたまたま動いていた、ということだと思
います。
> 調査すると、pg_class、pg_description、pg_attribute で
> 作成したユーザーテーブルの oid に整合がとれていないことが分かりました。
おそらくTRUNCATEやCLUSTERなどをしたテーブル群だと思います。
--
株式会社メトロシステムズ
インテグレーション事業部
花田茂
TEL: 03-5951-1219(部門直通)
pgsql-jp メーリングリストの案内