web-dev-qa-db-ja.com

SQLの復元中にpsqlの無効なコマンド\ N

ダンプファイルを復元しようとしていますが、エラーが発生しました。

psql:psit.sql:27485: invalid command \N

解決策はありますか?検索しましたが、明確な答えが得られませんでした。

116
Vivek Vikranth

Postgresは、「\ N」をNULL値の代替シンボルとして使用します。ただし、すべてのpsqlコマンドはバックスラッシュ「\」記号で始まります。したがって、おそらくcopyステートメントが失敗しても、ダンプのロードは継続するときに、このメッセージを取得できます。このメッセージは単なる誤報です。 COPYステートメントが失敗する理由のために、前に行を検索する必要があります。

Psqlを「最初のエラーで停止」モードに切り替えてエラーを見つけることは可能です。

psql -v ON_ERROR_STOP=1
174
Pavel Stehule

バイナリダンプから復元しようとすると、同じエラーメッセージが表示されます。 pg_restoreを使用してダンプを復元し、\Nエラーを完全に回避しました。

pg_restore -c -F t -f your.backup.tar

スイッチの説明:

-f, --file=FILENAME output file name -F, --format=c|d|t backup file format (should be automatic) -c, --clean clean (drop) database objects before recreating

31
nottinhill

私はこれが古い投稿であることを知っていますが、別の解決策に出会いました:postgisが新しいバージョンにインストールされていなかったため、pg_dumpで同じエラーが発生しました

9
So4ne

私も過去にこのエラーに遭遇しました。 Pavelは正しいです。通常、pg_restoreによって作成されたスクリプト内の何かが失敗していることを示しています。すべての「/ N」エラーのため、出力の最上部に実際の問題は表示されません。私は提案します:

  1. 単一の小さなテーブルの挿入(例:pg_restore --table=orders full_database.dump > orders.dump
  2. 小さなものがない場合は、復元スクリプトから大量のレコードを削除します-./がロードされる最後の行であることを確認しました(たとえば、orders.dumpを開いて、記録)
  3. 標準出力を監視し、問題が見つかったら、いつでもテーブルを削除してリロードできます

私の場合、「hstore」拡張機能がまだインストールされていなかったため、最上部でスクリプトが失敗していました。宛先データベースにhstoreをインストールし、仕事に戻りました。

7
oraserrata

--insertsパラメーターを指定したINSERTSステートメントを使用して、ダンプを生成できます。

6

Postgresql-(ご使用のバージョン)-postgis-scriptsをインストールします

3
Geets

今日も同じことが起こりました。 --insertsコマンドでダンプすることで問題を処理しました。

私がやることは:

1)挿入を伴うpg_dump:

pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql

2)psql(ダンプされたファイルを復元する)

psql "dbname=dbnamehere options=--search_path=schemaname" --Host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt

注-1)出力ファイルを追加すると、インポートの速度が向上することを確認してください。

注-2)psqlでインポートする前に、正確に同じ名前と列でテーブルを作成することを忘れないでください。

3
Ekrem Gurdal

私の最近の経験では、実際の問題がエスケープ文字や改行とは関係がないときにこのエラーが発生する可能性があります。私の場合、データベースAからダンプを作成しました。
pg_dump -a -t table_name > dump.sql
そしてそれをデータベースBに復元しようとしていた
psql < dump.sql(もちろん適切なenv変数を更新した後)
最終的にわかったのは、ダンプがdata-only-aオプションであるため、テーブル構造が明示的にダンプの一部ではないため)がスキーマ固有であるということです。つまり、ダンプを手動で変更しないと、schema1.table_nameから生成されたダンプを使用してschema2.table_nameを設定できませんでした。手動でダンプを変更するのは簡単で、スキーマは最初の15行程度で指定されます。

2

SUSE 12でpostgreSQL 10を使用している場合、ディスクスペースを増やすことでinvalid command \Nエラーを解決しました。ディスク容量の不足がエラーの原因でした。 df -h出力でデータのファイルシステムを見ると、ディスク領域が不足しているかどうかを確認できます。ファイルシステム/マウントが100%使用されている場合、psql -f db.out postgresのようなことを行った後( https://www.postgresql.org/docs/current/static/app-pg-dumpall.htmlを参照 )ディスクの空き容量を増やす必要がある可能性があります。

0
mountainclimber

ほとんどの場合、解決策はpostgres-contribパッケージをインストールすることです。

0
Farsheed