web-dev-qa-db-ja.com

PostgreSql:エラー:ダンプファイルからの復元中にリレーション「シーケンス」が存在しません

サーバー上のダンプファイルからデータベースを復元しているときに、次のエラーが発生します。

エラー:リレーション "table_id_seq"は存在しません
行1:SELECT pg_catalog.setval( 'table_id_seq'、362、true);

  • 私のローカルpsqlバージョンは10.2です
  • サーバーのpsqlバージョンは9.6.8です

これが私のダンプコマンドです:

pg_dump -U username -h localhost db_name > filename.sql

サーバーでの復元コマンドは次のとおりです。

psql -U username -h localhost db_name < filename.sql

助けてください、ありがとう。

5
Saly

@clemensから情報を入手して調査したところ、セクション_CREATE SEQUENCE table_id_seq_のダンプファイルに_AS integer_というステートメントがあり、新しいデータベースに復元したときにnextval()シーケンスの場合。ステートメント_AS integer_を_CREATE SEQUENCE_セクションから削除すると、それが機能します。

私のダンプファイル:

_CREATE SEQUENCE table_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
_

ダンプファイルから_AS integer_を削除します

_CREATE SEQUENCE table_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
_
10
Saly

ダンプファイルは、任意のテキストエディタ(メモ帳、Vimなど)で開くことができます。検索する table_id_seq。あなたは次のようなステートメントを見つける必要があります

CREATE SEQUENCE table_id_seq ...

それが欠落している場合は、ダンプに何か奇妙なことがあります。追加することでそれを修正するかもしれません

CREATE SEQUENCE table_id_seq;

声明の直前

SELECT pg_catalog.setval('table_id_seq', 362, true);

エラーメッセージから。

しかし、これは単なるハックです。あなたはダンプがなぜその間違いをしたのかを知ることになっていた。しかし、それにはより多くの情報が必要です。

1
clemens