Каков наилучший способ скопировать данные из связанных таблиц в другие связанные таблицы? - PullRequest
1 голос
/ 16 августа 2011

Каков наилучший способ скопировать данные из связанных таблиц в другие связанные таблицы с той же схемой.Таблица связана с отношением один-ко-многим.

Рассмотрим следующую схему

firm

id | name | city.id (FK)

employee

id | lastname | firm.id (FK)

firm2

id | name | city_id (FK)

employee2

id | lastname |firm2.id (FK)

Что я хочу сделать, это скопировать строки из firm с конкретными city.id в firm2 а и их employees, связанных с фирмой к столу employee2.

Я использую posgresql 9.0, поэтому мне нужно вызвать SELECT nextval('seq_name'), чтобы получить новый идентификатор для таблицы.

Сейчас я выполняю этот запрос, просто перебирая все строки в бэкэнд-сервере Java, но на огромномОбъем данных (50 000 сотрудников и 2000 фирм) занимает слишком много времени (1-3 минуты).

Мне интересно, есть ли еще один более хитрый способ сделать это, например, выбрать данные во временнуюТаблица?Или, возможно, использовать процедуру сохранения и перебирать строки с помощью cursror, чтобы избежать буферизации на моем внутреннем сервере?

1 Ответ

1 голос
/ 16 августа 2011

Это одна проблема, вызванная простым использованием последовательности или идентификатора в качестве единственного первичного ключа в таблице.

Если существует реальный уникальный индекс / первичный ключ, то вы можете присоединиться к нему.,Другой вариант - создать таблицу сопоставления, когда вы заполняете таблицы последовательностями, после чего вы можете вставить их в FK дочерних таблиц, присоединившись к таблицам сопоставления.Это не полностью устраняет необходимость в цикле, но, по крайней мере, некоторые из вставок перемещаются в подход, основанный на множествах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...