Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

pg_dumpとEXTENSION

概要

pg_dumpに-nをつけてスキーマ単位でのダンプを取得した際に、拡張機能がダンプに含まれないことについての脳内放出。

環境

PostgreSQL 10.5ぐらい

実際にやってみる

対象

項目
データベース名 test
スキーマ public

やってみた

CREATE EXTENSION tablefunc;
SELECT * FROM pg_extension; # tablefuncが作成されたことを確認。

して

pg_dump -U postgres -d test -n public > c:/temp/public.dmp

してみたあと

DROP DATABASE test;
CREATE DATABASE test;

でtestデータベースを再作成して

psql -U postgres -d test -f c:/temp/public.dmp

でリストアすると

SELECT * FROM pg_extension; # tablefuncが復元されないことを確認。

となります。

このあたりの挙動はおそらく

51.22. pg_extension

の「extnamespaceは、拡張がそのスキーマに属することを意図したものではありません」というとことか

37.15. 関連するオブジェクトを拡張としてパッケージ化

スキーマに関して説明されている部分が、そういうわけになるのかなぁ、とぼんやり。

じゃあどうすればいいの?

データベース単位でダンプするしかないようです。

まとめ

ダンプをリストアした後の検証ってほんと大事。リストアしたけどリストアされていませんでした、って後からわかってもどうしようもないですから。