powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
5 сообщений из 5, страница 1 из 1
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
    #32240478
BoJlxB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две связанные таблицы.
Вставку во вторую таблицу можно сделать только после того как узнаю автоинкрементированное значения id первой таблицы. Либо используя функцию nextval сначало узнать новое id, а потом вставлять сразу в две таблицы с этим id.

Проблема: если втавляю, допустип, 100 записей в первую таблицу, то мне нужно сначало сделать 100 раз nextval. И только потом все инсёрты (в одном запросе).
А можно ли как-нибудь сократить кол-во запросов к базе (не делать 100 раз nextval)?

P.S.: блокировку таблицы делать нельзя.
...
Рейтинг: 0 / 0
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
    #32240818
Vel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему НУЖНО делать блокировку.
А так делаешь один раз nextval, счетчик держишь у себя.
Вставляешь данные через COPY (insert дольше) не по одной записи, а все сразу. Сначала в одну, потом в другую.
потом пишешь что-то типа этого:
SELECT pg_catalog.setval ('_s_rating_seq', 20149, true); - таблица, новое значение сиквенса, обновить. А счетчик в проге/sql/руками.
...
Рейтинг: 0 / 0
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
    #32240940
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял задачу, то:

Код:
1.
2.
3.
4.
5.
6.
BEGIN WORK;
INSERT INTO table1 (...) VALUES (...);
INSERT INTO table2 ("foreign key", ...) VALUES (currval('table1_sequence'), ...);
-- повторить ещё 99 раз

COMMIT WORK;
...
Рейтинг: 0 / 0
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
    #32241022
BoJlxB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!
Но у вас обоих используется блокировка таблиц, но я её не могу делать.

2Vel:
А без блокировки твой метод абсолютно не подходит, т.к. за то время пока мы будет вставлять все сто записей не факт что в эту же таблицу никто другой ничего не вставит.

2Sad Spirit:
Теже возражения, но здесь время сжимается до минимума, т.е. время между:
INSERT INTO table1 (...) VALUES (...);
и
INSERT INTO table2 ("foreign key", ...) VALUES (currval('table1_sequence'), ...);
Как вы думаете этим временем можно пренебречь?
...
Рейтинг: 0 / 0
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
    #32241175
BoJlxB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Sad Spirit:
Я тут узнал что: "currval существует во время одного запроса и выдается именно ему".

Спасибо, ваш вариант полностью подходит!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]