Những gì bạn mô tả trong câu hỏi của mình rõ ràng không phải là những gì đang thực sự xảy ra. COPY
sẽ không thành công khi cố gắng nhập các ký tự chuỗi với các dấu ngoặc kép thừa vào một date
cột.
Để loại bỏ các dấu ngoặc kép thừa, hãy nhập vào bảng tạm thời với text
rồi đến cột INSERT INTO
bảng mục tiêu cắt bớt các dấu ngoặc kép:
CREATE TEMP TABLE wtmp (
city text
, temp_lo int
, temp_hi int
, prcp real
, date text -- note how I use text here.
);
COPY wtmp FROM '~aviad/postsgres/playground/weather.txt';
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
SELECT city, temp_lo, temp_hi, prcp, trim(date, '''')::date
FROM wtmp
-- ORDER BY ?
;
Bảng tạm thời sẽ tự động bị xóa vào cuối phiên của bạn.
Các từ dành riêng làm mã định danh
Tôi thấy bạn đã sao chép ví dụ từ sách hướng dẫn. Đây là liên kết sâu tới sách hướng dẫn hiện tại .
Mặc dù là chính xác, nhưng ví dụ đó trong sách hướng dẫn là không may. Tôi khuyên bạn không nên sử dụng các từ dành riêng như date
dưới dạng tên cột. Như bạn có thể thấy tại đây
date
là một từ dành riêng trong mọi tiêu chuẩn SQL. Nó được phép sử dụng trong Postgres và tôi có thể thấy nó hấp dẫn như thế nào bằng một ví dụ đơn giản. Nhưng đó không phải là một ý tưởng hay. Nói chung, bạn nên có thói quen tránh từ dành riêng làm định danh. Nó dẫn đến các thông báo lỗi khó hiểu và mã SQL không tương thích không cần thiết.