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 の方は テーブル定義の方の意味である。
生半可だった知識を整理する機会にはなった。
前の投稿:
NAStools, NASA Ames フォーマット用ツール
次の投稿:
Vim のインデント幅