Vì bạn không biết trước số lượng / loại hàng nên tôi khuyên bạn nên làm như thế này:
- (1) nhập CSV của bạn vào một bảng (tạm thời?) với một cột văn bản duy nhất mà không cần tách. Sử dụng
backspace
ký tự như một dấu phân tách để toàn bộ dòng đã nhập sẽ vẫn nguyên vẹn;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
- (2) chạy truy vấn chia CSV thành một mảng văn bản
- function
parse_csv
và sau đó sử dụng tập hợp các mảng văn bản có liên quan (có thể ánh xạ / chèn vào bảng mục tiêu 'thực')
WITH rawdata AS
(
SELECT parse_csv(rawtext) arr FROM rawtext_t
)
INSERT INTO real_t (...fields...)
SELECT arr[1], arr[3], ...
FROM rawdata;
TRUNCATE TABLE rawtext_t;
Bạn có thể thêm WHERE
mệnh đề trong SELECT
thứ hai để lọc các hàng đến nếu cần.
Tùy chọn khác - một điều rất hay theo hiểu biết của tôi - là sử dụng file_textarray_fdw tuyệt vời ít nhiều đều có cùng tác dụng.
Hy vọng rằng điều này cung cấp cho bạn ý tưởng và hữu ích.