From: | Alexey Klyukin <alexk(at)commandprompt(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | 'tuple concurrently updated' error for alter role ... set |
Date: | 2011-05-12 22:09:16 |
Message-ID: | 645346BD-753F-4EEA-94C8-61A0A52F59A0@commandprompt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hello,
We have recently observed a problem with concurrent execution of ALTER ROLE SET... in several sessions. It's similar to the one from http://git.postgresql.org/gitweb?p=postgresql.git;a=commitdiff;h=fbcf4b92aa64d4577bcf25925b055316b978744a The result is the 'tuple concurrently updated' error message, and the problem is easily reproducible:
CREATE SCHEMA test;
CREATE SCHEMA test2;
CREATE ROLE testrole;
session 1:
while [ 1 ]; do psql postgres -c 'alter role testrole set search_path=test2';done
session 2:
while [ 1 ]; do psql postgres -c 'alter role testrole set search_path=test';done
The error message appears almost immediately on my system.
After digging in the code I've found that a RowExclusiveLock is acquired on a pg_db_role_setting table in AlterSetting(). While the name of the locks suggests that it should conflict with itself, it doesn't. After I've replaced the lock in question with ShareUpdateExclusiveLock, the problem disappeared. Attached is the simple patch with these changes.
Regards,
--
Alexey Klyukin
The PostgreSQL Company - Command Prompt, Inc.
Attachment | Content-Type | Size |
---|---|---|
db_role_setting.diff | application/octet-stream | 1.3 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2011-05-12 22:09:24 | Re: Contrib Versions |
Previous Message | Tom Lane | 2011-05-12 21:55:20 | Re: plpgsql doesn't supply typmod for the Params it generates |