以前、以下の記事でPostgreSQLのリストア手順について紹介した。
上記記事の手順にしたがって、既存DBに対してリストアを行ったのだが、EC-CUBEで構築したサイトが表示されなくなった。
Apacheのエラーログを確認すると以下のエラーが吐かれていた。
relation “table_name” does not exist
テーブルは確かに存在するのに、何度サイトにアクセスしても何故かこのようなエラーが発生する。
少し詰まったが、何とか解決法が見つかったので本記事にまとめておく。
Contents
バックアップファイルの用意
まずは前回記事でも紹介したとおり、postgresユーザーのホームディレクトリ「/var/lib/pgsql/」内にバックアップファイルを用意する。
既存DBの全テーブルを削除
DBにテーブルが存在するとうまくリストアできなかったので、スキーマを削除しすべてのテーブルを削除する。
# postgresユーザーに切替 su postgres # シェルにログイン psql # DB選択 \c db_name # スキーマを削除 drop schema public cascade;
スキーマを作成
ここがポイントなのだが、スキーマを作成する際にpostgresユーザーのまま作成してしまうと先述のエラーが発生してしまうようだ。
一旦シェルからログアウトし、リストア対象DBのユーザーに切り替えてからスキーマを作成する。
# シェルからログアウト \q # ユーザー・DBを指定してシェルにログイン psql -U db_user db_name # スキーマを作成 create schema public; # ログアウト \q
リストア実行
psql db_name < /var/lib/pgsql/bkfile
リストア完了後、サイトを確認しエラーが発生しなければOK。