From: | Alexey Klyukin <alexk(at)commandprompt(dot)com> |
---|---|
To: | Dmitry E(dot) Oboukhov <unera(at)debian(dot)org> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2) |
Date: | 2012-12-21 14:31:02 |
Message-ID: | 43330F42-8BAC-48DB-9E52-C3AC682D7FE0@commandprompt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
On Dec 21, 2012, at 12:20 PM, Dmitry E. Oboukhov <unera(at)debian(dot)org> wrote:
>
> инсерты идут по одному.
>
> но вот дедлочится тот (первый) инсерт который идет в одной транзакции
> с вставкой в ордер.
>
> собственно вставка выглядит так:
>
> 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 = тот же юзер что и выше
>
>
> связь я улавливаю, но природу дедлока понять не могу :)
Проблема, похоже, вызвана тем, что при вставке строки в таблицу с внешними ключами соответствующая строка в таблице, на которую ссылается внешний ключ, блокируется на запись до конца транзакции, поэтому запрос UPDATE может ожидать окончания транзакции с INSERT . Чего ждет сама эта транзация - не совсем понятно, возможно users имеет внешний ключ на orders, тут полезно посмотреть pg_locks вместе с pg_stat_activity.
Проблема, если это она, известная, ее решение отложено до выхода 9.3: https://commitfest.postgresql.org/action/patch_view?id=987
--
Alexey Klyukin http://www.commandprompt.com
The PostgreSQL Company – Command Prompt, Inc.
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry E. Oboukhov | 2012-12-28 18:44:02 | не используется индекс |
Previous Message | Dmitry E. Oboukhov | 2012-12-21 10:20:44 | Re: Re: [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2) |