Nhập dữ liệu
COPY
mọi thứ vào một bảng dàn dựng tạm thời và chỉ chèn các tiêu đề mới vào bảng mục tiêu của bạn.
CREATE TEMP TABLE tmp(title text);
COPY tmp FROM 'path/to/file.csv';
ANALYZE tmp;
INSERT INTO tbl
SELECT DISTINCT tmp.title
FROM tmp
LEFT JOIN tbl USING (title)
WHERE tbl.title IS NULL;
ID phải được tạo tự động bằng serial
cột tbl_id
trong tbl
.
LEFT JOIN
/ IS NULL
xây dựng loại bỏ tiêu đề đã tồn tại. NOT EXISTS
sẽ là một khả năng khác.
DISTINCT
ngăn các bản sao trong dữ liệu đến trong bảng tạm thời tmp
.
ANALYZE
rất hữu ích để đảm bảo trình lập kế hoạch truy vấn chọn một kế hoạch hợp lý và các bảng tạm thời không được phân tích bằng autovacuum.
Vì bạn có 3 triệu mặt hàng, bạn có thể phải trả tiền để tăng cài đặt cho temp_buffer
( chỉ dành cho phiên này ):
SET temp_buffers = 1000MB;
Hoặc bạn có thể chi trả bao nhiêu và đủ để chứa bảng tạm trong RAM, nhanh hơn nhiều. Lưu ý:phải được thực hiện đầu tiên trong phiên - trước khi bất kỳ đối tượng tạm thời nào được tạo.
Truy xuất ID
Để xem tất cả các ID cho dữ liệu đã nhập:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
Trong cùng một phiên! Bảng tạm thời sẽ tự động bị xóa vào cuối phiên.