Enterprise Postgresのpg_dump/pg_dumpallコマンドで抽出したスクリプトファイル(平文形式)を使用してリストアを実行した際のデータベースオブジェクトの存在/未存在/削除不可のエラーについて

Enterprise Postgres の技術情報はこちら

Enterprise Postgresのpg_dumpやpg_dumpallコマンドで抽出したスクリプトファイル(平文形式)を使用して、psqlコマンドでリストアを実行した際、以下のようなエラーになりました。原因と対処方法を教えてください。
  • schema "@1@" already exists
  • index "@1@" does not exist
  • cannot drop @1@ because other objects depend on it
[原因]
pg_dumpやpg_dumpallコマンドを実行する際に、-cや-Cオプションを指定していること、または、-cや-Cオプションの指定が漏れていることが原因の可能性があります。

[対処方法]
以下を踏まえて、pg_dumpやpg_dumpallコマンドを実行する際の-cや-Cオプションの指定有無を検討してください。
  • リストア先のデータベースオブジェクトの作成状況
  • リストア先にデータベースオブジェクトが作成されている場合は、そのデータベースオブジェクトに対する扱い(再作成/そのまま利用)

-c、-Cオプションの仕様は、以下のとおりです。
  • -cオプション(--cleanオプション)
    スクリプトファイルの最初に、データベースオブジェクトを削除するコマンドを出力します。
  • -Cオプション(--createオプション) ※pg_dumpallコマンドでは指定できません。
    スクリプトファイルの最初に、データベース自体を作成するコマンドを出力します。-cオプションと同時に指定した場合は、データベースを削除したあと、再作成します。

※pg_dumpやpg_dumpallコマンドでの-c、-Cオプションの指定は、スクリプトファイル(平文形式)へ抽出する場合のみ有効です。アーカイブファイル(アーカイブ形式)へ抽出する場合は、pg_restoreコマンドに指定することを検討してください。
※pg_dumpやpg_dumpallコマンドで-cオプションを指定、かつ、リストアでデータベースオブジェクトの未存在や削除不可エラーとなった場合は、リストアが正常に完了していれば、対処は不要です。
※pg_dumpやpg_dumpallコマンドで-cと-Cオプションを指定していない、かつ、リストアでデータベースオブジェクトが既に存在するエラーとなった場合は、スクリプトファイルに含まれるリストア対象のオブジェクトを予め削除しておけば、現在のスクリプトファイルを、そのまま使用して、リストアを実行することができます。

詳細は以下のマニュアルを参照してください。

 FUJITSU Software Enterprise Postgres 12
  PostgreSQL 12.1 Documentation
   Part VI. Reference
    PostgreSQL Client Applications
     pg_dump
     pg_dumpall

なお、上記以外の製品バージョン/レベルについては、該当するマニュアル箇所を参照してください。
製品・サービス区分 Enterprise Postgres
製品・サービス情報
プラットフォームWindows,Solaris,Linux
アンサー種別 運用/保守
このページの先頭へ