PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara menyisipkan secara massal hanya baris baru di PostreSQL

Impor data

COPY semuanya ke tabel pementasan sementara dan masukkan hanya judul baru ke dalam tabel target Anda.

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 harus dibuat secara otomatis dengan serial kolom tbl_id di tbl .

LEFT JOIN / IS NULL konstruksi mendiskualifikasi judul yang sudah ada. NOT EXISTS akan menjadi kemungkinan lain.

DISTINCT mencegah duplikasi dalam data yang masuk di tabel sementara tmp .

ANALYZE berguna untuk memastikan perencana kueri memilih rencana yang masuk akal, dan tabel sementara tidak dianalisis oleh autovacuum.

Karena Anda memiliki 3 juta item, mungkin perlu membayar untuk menaikkan setelan temp_buffer (untuk sesi ini saja ):

SET temp_buffers = 1000MB;

Atau seberapa banyak Anda mampu dan cukup untuk menahan tabel temp dalam RAM, yang jauh lebih cepat. Catatan:harus dilakukan pertama dalam sesi - sebelum objek temp dibuat.

Ambil ID

Untuk melihat semua ID untuk data yang diimpor:

SELECT tbl.tbl_id, tbl.title
FROM   tbl
JOIN   tmp USING (title)

Di sesi yang sama! Tabel sementara dijatuhkan secara otomatis di akhir sesi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:INSERT Serbaguna

  2. Gunakan variabel yang disetel oleh perintah meta psql di dalam blok DO

  3. Verifikasi koneksi database dengan pg-promise saat memulai aplikasi

  4. Pemicu dengan nama bidang dinamis

  5. Anonimisasi PostgreSQL Sesuai Permintaan