Re: Re: [pgsql-ru-general] Дедлоки и FOREIGN(pg9.1.2)
От | Dmitry E. Oboukhov |
---|---|
Тема | Re: Re: [pgsql-ru-general] Дедлоки и FOREIGN(pg9.1.2) |
Дата | |
Msg-id | 20121221102044.GA8447@vdsl.uvw.ru обсуждение исходный текст |
Ответ на | Re: [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2) (Sergey Konoplev <gray.ru@gmail.com>) |
Список | pgsql-ru-general |
>> orders_logs - имеет FOREIGN на users и orders соответственно (uid, >> oid) >> >> Кронскрипт иногда юзерам обновляет статусы >> >> UPDATE >> users >> SET >> status = что-то там, >> time = NOW() >> WHERE >> id = что-то там >> >> а в orders_logs иногда пишутся события: >> >> INSERT INTO >> "orders_logs" >> >> ("uid", "oid", "time", "event") >> VALUES >> (123, 2345, NOW(), что-то там) >> >> и вот обновление статуса у юзера изредка встает в дедлок с инсертом в >> orders_logs. >> >> как такой дедлок можно вылечить? > Судя по всему инсерты идут пачками в транзакции, так? > Можно ли отказаться от транзакции, делая отдельные инсерты? инсерты идут по одному. но вот дедлочится тот (первый) инсерт который идет в одной транзакции с вставкой в ордер. собственно вставка выглядит так: BEGIN TRANSACTION; INSERT INTO orders ... RETURNING "id" INSERT INTO orders_logs oid = вставленый_выше id, uid = определенный вне транзакции uid, comment = 'Заказ такой-то создан' COMMIT таблица orders не имеет ссылок ни на какие другие таблицы. таблица orders_logs имеет ссылки на users и orders дедлочится это с запросом (вне транзакции) UPDATE users SET status = что-то WHERE id = тот же юзер что и выше связь я улавливаю, но природу дедлока понять не могу :) -- . ''`. Dmitry E. Oboukhov : :’ : email: unera@debian.org jabber://UNera@uvw.ru `. `~’ GPGKey: 1024D / F8E26537 2006-11-21 `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
Вложения
В списке pgsql-ru-general по дате отправления: