以前、以下の記事で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。