以前、以下の記事でPostgreSQLのリストア手順について紹介した。
上記記事の手順にしたがって、既存DBに対してリストアを行ったのだが、EC-CUBEで構築したサイトが表示されなくなった。
Apacheのエラーログを確認すると以下のエラーが吐かれていた。
relation “table_name” does not exist
テーブルは確かに存在するのに、何度サイトにアクセスしても何故かこのようなエラーが発生する。
少し詰まったが、何とか解決法が見つかったので本記事にまとめておく。
コンテンツ
バックアップファイルの用意
まずは前回記事でも紹介したとおり、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。