pg_restoreでpg_catalogの権限がねえよとエラーが出てハマったので、原因と解決方法を記事にしました。
やりたかったこと
既存DBのダンプファイルから新規DBにあるスキーマだけをリストアしたい。
状況
既存DBのダンプファイルを以下のコマンドでリストしました。
#pg_restore -U postgres -n [schema] -d [databese] -f [file]
これは、ダンプファイルの[schema]だけリストアしたいときに使うコマンドです。
その際に以下のようなエラーが出ました。
スキーマ pg_catalog への権限がありません
解決策
新規DBにリストアしたいスキーマを予め作成したらうまくいった。
原因
リストアする際に発行するSQLを見ると以下のようになっていました。
SET search_path = ([schema],pg_catalog)
リストアするスキーマとpg_catalogにsearch_pathが設定されていました。予めリストアするスキーマを作成していなかったので、pg_catalogにsearch_pathが設定されてしまいます。
そのため、pg_catalogスキーマにリストアを実行しようとしてしまうため、権限エラーとなります。
スキーマをリストアする際は必ずリストア先のDBにスキーマを作成しておくのを忘れないようにしようと心に誓いました。