sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan masseindsætter du kun nye rækker i PostreSQL

Importér data

COPY alt til et midlertidigt iscenesættelsesbord og indsæt kun nye titler i din måltabel.

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'er skal genereres automatisk med en serial kolonne tbl_id i tbl .

LEFT JOIN / IS NULL konstruktion diskvalificerer allerede eksisterende titler. NOT EXISTS ville være en anden mulighed.

DISTINCT forhindrer dubletter i de indgående data i den midlertidige tabel tmp .

ANALYZE er nyttig for at sikre, at forespørgselsplanlæggeren vælger en fornuftig plan, og at midlertidige tabeller ikke analyseres af autovakuum.

Da du har 3 millioner varer, kan det betale sig at hæve indstillingen for temp_buffer (kun for denne session ):

SET temp_buffers = 1000MB;

Eller hvor meget du har råd til og er nok til at holde vikarbordet i RAM, hvilket er meget hurtigere. Bemærk:skal gøres først i sessionen - før der oprettes midlertidige objekter.

Hent ID'er

For at se alle ID'er for de importerede data:

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

I samme session! En midlertidig tabel slettes automatisk i slutningen af ​​sessionen.




  1. Oracle partitionsindeks

  2. android SQLite-database med database på specifik placering muligt?

  3. opret forbindelse til postgres server på google compute engine

  4. MySQL kommandolinjeformatering med UTF8