Tôi đang cố gắng khôi phục tệp kết xuất của mình, nhưng nó đã gây ra lỗi:
psql:psit.sql:27485: invalid command \N
Có một giải pháp? Tôi đã tìm kiếm, nhưng tôi không nhận được câu trả lời rõ ràng.
Tôi đang cố gắng khôi phục tệp kết xuất của mình, nhưng nó đã gây ra lỗi:
psql:psit.sql:27485: invalid command \N
Có một giải pháp? Tôi đã tìm kiếm, nhưng tôi không nhận được câu trả lời rõ ràng.
Câu trả lời:
Postgres sử dụng "\ N" làm biểu tượng thay thế cho giá trị NULL. Nhưng tất cả các lệnh psql bắt đầu bằng ký hiệu dấu gạch chéo ngược "\". Vì vậy, bạn có thể nhận được thông báo này, khi có thể sao chép câu lệnh thất bại, nhưng quá trình tải kết xuất vẫn tiếp tục. Thông báo này chỉ là báo động sai. Bạn phải tìm kiếm một dòng trước vì lý do tại sao câu lệnh COPY không thành công.
Có thể chuyển chế độ psql sang chế độ "dừng ở lỗi đầu tiên" và tìm lỗi:
psql -v ON_ERROR_STOP=1
create table...
thất bại khi bắt đầu, nhưng tải vẫn tiếp tục.
(pg_restore ... | psql ...) 2>&1 | less
Tôi đi cùng một thông báo lỗi khi cố gắng khôi phục từ một kết xuất nhị phân. Tôi chỉ đơn giản được sử dụng pg_restore
để khôi phục kết xuất của mình và tránh hoàn toàn các \N
lỗi, ví dụ:
pg_restore -c -F t -f your.backup.tar
Giải thích về thiết bị chuyển mạch:
-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
Tôi đã gặp phải lỗi này trong quá khứ. Pavel là chính xác, nó thường là một dấu hiệu cho thấy một cái gì đó trong kịch bản được tạo bởi pg_restore đang thất bại. Do tất cả các lỗi "/ N", bạn không thấy vấn đề thực sự ở đầu sản phẩm. Tôi đề nghị:
pg_restore
--table=orders full_database.dump > orders.dump
:)orders.dump
và xóa một loạt các bản ghi)Trong trường hợp của tôi, tôi chưa cài đặt tiện ích mở rộng "hstore", vì vậy tập lệnh bị lỗi ở đầu trang. Tôi đã cài đặt hstore trên cơ sở dữ liệu đích và tôi đã quay lại công việc.
Bạn có thể tạo kết xuất của mình bằng cách sử dụng các câu lệnh INSERTS, với tham số --inserts.
Điều tương tự đã xảy ra với tôi ngày hôm nay. Tôi đã xử lý vấn đề bằng cách bán phá giá bằng lệnh --inserts.
Những gì tôi làm là:
1) pg_dump với chèn:
pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2) psql (khôi phục tập tin kết xuất của bạn)
psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
Lưu ý-1) Đảm bảo rằng việc thêm tệp đầu ra sẽ tăng tốc độ nhập.
Lưu ý-2) Đừng quên tạo bảng có cùng tên và cột trước khi nhập bằng psql.
Theo kinh nghiệm gần đây của tôi, có thể gặp lỗi này khi vấn đề thực sự không liên quan đến các ký tự thoát hoặc dòng mới. Trong trường hợp của tôi, tôi đã tạo một kết xuất từ cơ sở dữ liệu A với
pg_dump -a -t table_name > dump.sql
và đang cố gắng khôi phục nó vào cơ sở dữ liệu B với
psql < dump.sql
(sau khi cập nhật các vv env thích hợp, tất nhiên)
Điều cuối cùng tôi đã tìm ra là kết xuất đó, mặc dù đó là data-only
( -a
tùy chọn , do đó, cấu trúc bảng không rõ ràng là một phần của kết xuất), là đặc trưng cho lược đồ. Điều đó có nghĩa là nếu không sửa đổi thủ công kết xuất, tôi không thể sử dụng kết xuất được tạo từ schema1.table_name
để cư trú schema2.table_name
. Sửa đổi thủ công kết xuất dễ dàng, lược đồ được chỉ định trong 15 dòng đầu tiên hoặc lâu hơn.
Đối với tôi sử dụng postgreSQL 10 trên SUSE 12, tôi đã khắc phục invalid command \N
lỗi bằng cách tăng dung lượng đĩa. Thiếu không gian đĩa đã gây ra lỗi cho tôi. Bạn có thể biết nếu bạn hết dung lượng đĩa nếu bạn nhìn vào hệ thống tệp mà dữ liệu của bạn sẽ xuất hiện ở df -h
đầu ra. Nếu hệ thống tệp / mount được sử dụng 100%, sau khi thực hiện một số thứ như psql -f db.out postgres
(xem https://www.postgresql.org/docs/civerse/static/app-pg-dumpall.html ) bạn có thể cần tăng dung lượng đĩa trống .
Tôi gặp vấn đề tương tự, tôi đã tạo một cơ sở dữ liệu mới và đã invalid command \N
khôi phục bằng psql. Tôi đã giải quyết nó bằng cách đặt cùng một vùng bảng với cơ sở dữ liệu cũ.
Ví dụ, sao lưu cơ sở dữ liệu cũ có không gian bảng "pg_default", tôi đã xác định cùng một không gian bảng cho cơ sở dữ liệu mới và lỗi trên đã biến mất!