PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как групово да вмъкнете само нови редове в PostreSQL

Импортиране на данни

COPY всичко ввременна таблица за преобразуване и вмъкнете само нови заглавия във вашата целева таблица.

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;

Идентификаторите трябва да се генерират автоматично с serial колона tbl_id в tbl .

LEFT JOIN / IS NULL construct дисквалифицира вече съществуващи заглавия. NOT EXISTS би било друга възможност.

DISTINCT предотвратява дублирането на входящите данни във временната таблица tmp .

ANALYZE е полезно, за да се уверите, че плановникът на заявки избира разумен план и временните таблици не се анализират чрез автоматично вакуумиране.

Тъй като имате 3 милиона артикула, може да си струва да повишите настройката за temp_buffer (само за тази сесия ):

SET temp_buffers = 1000MB;

Или колкото можете да си позволите и е достатъчно, за да държите temp таблицата в RAM, което е много по-бързо. Забележка:трябва да се направи първо в сесията - преди да бъдат създадени временни обекти.

Извличане на идентификатори

За да видите всички идентификатори за импортираните данни:

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

В същата сесия! Временна таблица се отпада автоматично в края на сесията.




  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 - ГРЕШКА:датата на колоната не може да бъде прехвърлена към тип дата

  2. Преглед на промените в индекса в PostgreSQL 11

  3. Как да конвертирате Unix Timestamp в стойност на дата/час в PostgreSQL

  4. foreach %dopar% + RPostgreSQL

  5. Как sqrt() работи в PostgreSQL