pg_dump で PostGIS を無視するには

PostgreSQL のバージョンアップを他人任せにしたら、 PostGIS 用のテンプレート上にリストアされてしまって、 pg_dump に余計なものが混じるようになってしまった。

取り敢えず、PostGIS 用のビューとテーブルを削除したものの、 他にデータタイプと函数が大量に登録されていて、気が遠くなる。 幸いなことに、今まではデータタイプも函数も使用していなかったので、 これらをまとめて全部無視すれば良いということが判った。

調べてみると、pg_dump には –table オプションがあり、これは テーブル、ビュー、シーケンスのみをダンプする機能であった。 試しに使ってみると、テーブル作成からインデクス、外部キー制約まで 一通り出力してくれるようだ。

他に –data-only というオプションもあるが、こちらは 外部キー制約が上手く出力できないようで、 notice が出力された。 これは使わない方が良いだろう。

結論としては以下のようになる。PostGIS は topology という スキーマを作成するので public.* と指定した方が間違いがない。

# pg_dump -h host -U user -c --table="public.*" database

なお、PostgreSQL のスキーマには 2重の意味があって、最初は混乱した。 実際に pg_dump の man にもそう書いてある。:

--schema-only
     .. snip ..
    (Do not confuse this with the --schema option, which uses the word
    "schema" in a different meaning.)

–schema の方は名前空間の方の意味で、 –schema-only の方は テーブル定義の方の意味である。

生半可だった知識を整理する機会にはなった。