|
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
|
|||
---|---|---|---|
#18+
Есть две связанные таблицы. Вставку во вторую таблицу можно сделать только после того как узнаю автоинкрементированное значения id первой таблицы. Либо используя функцию nextval сначало узнать новое id, а потом вставлять сразу в две таблицы с этим id. Проблема: если втавляю, допустип, 100 записей в первую таблицу, то мне нужно сначало сделать 100 раз nextval. И только потом все инсёрты (в одном запросе). А можно ли как-нибудь сократить кол-во запросов к базе (не делать 100 раз nextval)? P.S.: блокировку таблицы делать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2003, 15:05 |
|
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
|
|||
---|---|---|---|
#18+
По-моему НУЖНО делать блокировку. А так делаешь один раз nextval, счетчик держишь у себя. Вставляешь данные через COPY (insert дольше) не по одной записи, а все сразу. Сначала в одну, потом в другую. потом пишешь что-то типа этого: SELECT pg_catalog.setval ('_s_rating_seq', 20149, true); - таблица, новое значение сиквенса, обновить. А счетчик в проге/sql/руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2003, 18:36 |
|
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
|
|||
---|---|---|---|
#18+
Если я правильно понял задачу, то: Код: 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2003, 22:58 |
|
Как сделать грамотный инсерт большого кол-ва записей в две связанны таблицы
|
|||
---|---|---|---|
#18+
Спасибо за ответы! Но у вас обоих используется блокировка таблиц, но я её не могу делать. 2Vel: А без блокировки твой метод абсолютно не подходит, т.к. за то время пока мы будет вставлять все сто записей не факт что в эту же таблицу никто другой ничего не вставит. 2Sad Spirit: Теже возражения, но здесь время сжимается до минимума, т.е. время между: INSERT INTO table1 (...) VALUES (...); и INSERT INTO table2 ("foreign key", ...) VALUES (currval('table1_sequence'), ...); Как вы думаете этим временем можно пренебречь? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2003, 07:08 |
|
|
start [/forum/topic.php?fid=53&msg=32240818&tid=2008134]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 130ms |
0 / 0 |