PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách chèn hàng loạt chỉ hàng mới trong PostreSQL

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lấy nhận xét từ cơ sở dữ liệu PostgreSQL

  2. PostgreSQL không chấp nhận bí danh cột trong mệnh đề WHERE

  3. Cách tốt nhất để xóa hàng triệu hàng theo ID

  4. Làm thế nào để xóa triệt để và cài đặt lại postgresql trên ubuntu?

  5. Cột không tồn tại?