Используйте команду COPY FROM в PostgreSQL для вставки в несколько таблиц - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь использовать производительность команды COPY FROM в PostgreSQL, чтобы получить все данные 1 таблицы файла CSV (CSV -> table1), и мне нужно вставить другие данные, но в новую таблицу.Мне понадобится первичный ключ первой таблицы, чтобы поместить в качестве внешнего ключа во вторую таблицу.Пример: мне нужно вставить 1 000 000 имен в таблице 1 и 500 000 имен в таблице 2, но все имена в таблице 2 ссылаются на один кортеж в таблице 1.

CREATE TABLE table1 (
   table1Id bigserial  NOT NULL,
   Name varchar(100)  NULL,
   CONSTRAINT table1Id PRIMARY KEY (table1Id)
);
CREATE TABLE table2 (
   table2Id bigserial  NOT NULL,
   Other_name varchar(100)  NOT NULL
   table1_table1Id int8  NOT NULL,
   CONSTRAINT table2_pk PRIMARY KEY (table2Id)
);

1 Ответ

0 голосов
/ 11 октября 2018

Команда COPY не разрешает манипулирование таблицами при копировании данных (например, поиск другой таблицы для получения правильных внешних ключей для вставки).Чтобы вставить в table2 идентификаторы для соответствующих строк из table1, вам нужно удалить ограничение NOT NULL для этого поля, COPY данные и затем UPDATE эти поля отдельно.

Предполагая table1 иtable2 таблицы могут объединяться table1.Name = table2.Other_name, код:

До КОПИРОВАНИЯ:

ALTER TABLE table2 ALTER COLUMN table1_table1Id DROP NOT NULL;

После КОПИРОВАНИЯ:

UPDATE table2 SET table2.table1_table1Id = table1.table1Id
FROM table1
WHERE table1.Name = table2.Other_name;
ALTER TABLE table2 ALTER COLUMN table1_table1Id SET NOT NULL;
...