Saya mencoba mengembalikan file dump saya, tetapi menyebabkan kesalahan:
psql:psit.sql:27485: invalid command \N
Apakah ada solusinya? Saya mencari, tetapi saya tidak mendapatkan jawaban yang jelas.
Saya mencoba mengembalikan file dump saya, tetapi menyebabkan kesalahan:
psql:psit.sql:27485: invalid command \N
Apakah ada solusinya? Saya mencari, tetapi saya tidak mendapatkan jawaban yang jelas.
Jawaban:
Postgres menggunakan "\ N" sebagai simbol pengganti untuk nilai NULL. Tetapi semua perintah psql dimulai dengan simbol backslash "\". Jadi Anda bisa mendapatkan pesan ini, ketika mungkin pernyataan salin gagal, tetapi pemuatan dump berlanjut. Pesan ini hanya alarm palsu. Anda harus mencari baris sebelumnya untuk alasan mengapa pernyataan COPY gagal.
Dimungkinkan untuk beralih psql ke mode "stop on first error" dan untuk menemukan kesalahan:
psql -v ON_ERROR_STOP=1
create table...
gagal di awal, tetapi memuat berlanjut.
(pg_restore ... | psql ...) 2>&1 | less
Saya pergi pesan kesalahan yang sama ketika mencoba untuk memulihkan dari dump biner. Saya hanya digunakan pg_restore
untuk mengembalikan dump saya dan sepenuhnya menghindari \N
kesalahan, misalnya
pg_restore -c -F t -f your.backup.tar
Penjelasan sakelar:
-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
Saya telah mengalami kesalahan ini di masa lalu juga. Pavel benar, biasanya merupakan tanda bahwa sesuatu dalam skrip yang dibuat oleh pg_restore gagal. Karena semua kesalahan "/ N", Anda tidak melihat masalah sebenarnya di bagian paling atas dari output. Saya menyarankan:
pg_restore
--table=orders full_database.dump > orders.dump
)orders.dump
dan hapus banyak catatan)Dalam kasus saya, saya belum menginstal ekstensi "hstore", jadi skripnya gagal di bagian paling atas. Saya menginstal hstore pada database tujuan, dan saya kembali berbisnis.
Anda dapat menghasilkan dump Anda menggunakan pernyataan INSERTS, dengan parameter --inserts.
Hal yang sama terjadi pada saya hari ini. Saya menangani masalah dengan membuang dengan perintah --inserts.
Apa yang saya lakukan adalah:
1) pg_dump dengan sisipan:
pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2) psql (pulihkan file yang Anda buang)
psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
Catatan-1) Pastikan bahwa menambahkan outputfile akan meningkatkan kecepatan impor.
Catatan-2) Jangan lupa untuk membuat tabel dengan nama dan kolom yang sama persis sebelum mengimpor dengan psql.
Dalam pengalaman saya baru-baru ini, dimungkinkan untuk mendapatkan kesalahan ini ketika masalah sebenarnya tidak ada hubungannya dengan karakter melarikan diri atau baris baru. Dalam kasus saya, saya telah membuat dump dari database A dengan
pg_dump -a -t table_name > dump.sql
dan sedang mencoba mengembalikannya ke database B dengan
psql < dump.sql
(setelah memperbarui vars env yang tepat, tentu saja)
Apa yang akhirnya saya tahu adalah dump itu, meskipun itu data-only
( -a
opsi) , sehingga struktur tabel tidak secara eksplisit bagian dari dump), adalah skema khusus. Itu berarti bahwa tanpa secara manual memodifikasi dump, saya tidak bisa menggunakan dump yang dihasilkan dari schema1.table_name
untuk mengisi schema2.table_name
. Memodifikasi dump secara manual dengan mudah, skema ditentukan dalam 15 baris pertama atau lebih.
Bagi saya menggunakan postgreSQL 10 pada SUSE 12, saya menyelesaikan invalid command \N
kesalahan dengan menambah ruang disk. Kurangnya ruang disk menyebabkan kesalahan bagi saya. Anda dapat mengetahui apakah Anda kehabisan ruang disk jika Anda melihat sistem file data Anda akan di df -h
output. Jika sistem file / mount digunakan 100%, setelah melakukan sesuatu seperti psql -f db.out postgres
(lihat https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ) Anda mungkin perlu menambah ruang disk yang tersedia .
Saya memiliki masalah yang sama, saya membuat database baru dan invalid command \N
memulihkan dengan psql. Saya memecahkannya dengan mengatur tablespace yang sama dengan database lama.
Sebagai contoh, backup database lama memiliki tablespace "pg_default", saya mendefinisikan tablespace yang sama ke database baru, dan kesalahan di atas telah hilang!
Saya mengikuti semua contoh ini dan mereka semua gagal dengan kesalahan yang kita bicarakan:
Salin sebuah tabel dari satu basis data ke basis data lain di Postgres
Apa yang berhasil adalah sintaks dengan -C , lihat di sini:
pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"
Juga jika ada Skema yang berbeda di antara keduanya, saya menemukan mengubah skema satu dB untuk mencocokkan yang lain diperlukan agar salinan Tabel berfungsi, misalnya:
DROP SCHEMA public;
ALTER SCHEMA originalDBSchema RENAME TO public;