最近、スキーマを削除し、ダンプファイルからリストアする作業を行いました。
本番環境ではなく、開発環境でしたがとても恐ろしい作業でしたので、後人の参考に少しでもなればと思い記載します。
linuxサーバで稼働中のDBを1度削除し、デイリーで作成しているダンプファイルから、DBを作り直しました。
手順はこちらです。
まずは環境を使用している各チームに周知を必ずしましょう。突然サービスが動かなくなります。
linuxサーバに入り、さっそくPostgreSQLに接続し、ドロップコマンドを実行します。
psql -U ユーザ名 -d データベース名
drop schema スキーマ名 cascade;
ERROR: must be owner of schema スキーマ名
はい。エラーが起きました。
スキーマを削除する際はスキーマの所有者じゃないとダメでした。
一度PostgreSQLを抜けてスキーマの所有者で入りなおします。
psql -U ユーザ名(所有者) -d データベース名
drop schema スキーマ名 cascade;
今度はスキーマの削除ができました。
※今回は所有者で入り直しスキーマの削除を行いましたが、
他にスキーマの所有者を変更するやり方もあります
alter schema スキーマ名 owner to ユーザ名;
create schema スキーマ名 ;
今回はユーザ名の指定を行いませんでした。この場合、コマンド実行者が所有者となります。
サーバーにダンプファイルを置きます。
私はworkディレクトリを用意しそこにファイルを置きました。
~/work/ダンプファイル
ダンプファイルの準備ができたので、以下でダンプファイル内のコマンドを読み込み実行します。
cd ~/work
psql -U ユーザ名(所有者) -d スキーマ名 -f ダンプファイル
無事に実行が終わるとリストア完了です。
サービスが正常に稼働するか動作確認し、使用している各チームへ完了報告を行いましょう。