Cách chỉ định một tab trong COPY giao diện người dùng postgres


83

Tôi muốn sử dụng lệnh psql "\ copy" để kéo dữ liệu từ tệp được phân tách bằng tab vào Postgres. Tôi đang sử dụng lệnh này:

\copy cm_state from 'state.data' with delimiter '\t' null as ;

Nhưng tôi nhận được cảnh báo này (bảng thực sự tải tốt):

WARNING:  nonstandard use of escape in a string literal
LINE 1: COPY cm_state FROM STDIN DELIMITER '\t' NULL AS ';'
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.

Làm cách nào để chỉ định một tab nếu '\ t' không đúng?


14
Hãy thử xem thông báo lỗi gợi ý:\copy cm_state from 'state.data' with delimiter E'\t' null as ';'
Frank Farmer,

Đúng, bạn nói đúng. Tôi không thấy chữ "E" ở đầu trên thông báo lỗi. Cảm ơn nhiều!
Chris Curvey

2
E bắt đầu một chuỗi thoát. Hãy nghĩ về E giống như bạn làm với một chuỗi được trích dẫn kép trong C. E '\ t' == "\ t".
Sean

Câu trả lời:


182

Sử dụng E'\t'để nói với postgresql rằng có thể có các ký tự thoát trong đó:

\copy cm_state from 'state.data' with delimiter E'\t' null as ;

16
Cảm ơn! Điều này cũng giải quyết lỗi ít thông tin hơn COPY delimiter must be a single one-byte charactercho tôi. Thêm nó vào đây để công cụ tìm kiếm có thể nhận nó.
Denis Drescher

Đây sẽ là một câu trả lời khác với thông báo lỗi. Chỉ để các công cụ tìm kiếm chọn nó :)
RK Kuppala

5

bạn có thể làm được việc này copy cm_state from stdin with (format 'text')


1
dấu phân cách mặc định cho tập tin văn bản là một tab .. Tôi đã sử dụng này và nó hoạt động .. postgresql.org/docs/9.2/static/sql-copy.html
user4372693

1
Điều này giúp ích khi bạn muốn đặt lệnh trong một tập lệnh shell - $$\t$$có vẻ như không hiệu quả, kỳ lạ.
Otheus

Điều này hoạt động đối với dữ liệu được tạo bởi pg_dumpmà không có các tùy chọn khác được chỉ định.
GuiRitter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.