Re: [pgsql-ru-general] [pgsql-ru-general] Дедлоки и FOREIGN (pg9.1.2)

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.

In response to

Browse pgsql-ru-general by date

  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)