Re: 'tuple concurrently updated' error for alter role ... set
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alexey Klyukin <alexk@commandprompt.com>
Cc: pgsql-hackers@postgresql.org
Date: 2011-05-12T22:28:48Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix possible "tuple concurrently updated" error in ALTER TABLE.
- fbcf4b92aa64 9.1.0 cited
Alexey Klyukin <alexk@commandprompt.com> writes: > 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. We're not likely to do that, first because it's randomly different from the handling of every other system catalog update, and second because it would serialize all updates on this catalog, and probably create deadlock cases that don't exist now. (BTW, as the patch is given I'd expect it to still fail, though perhaps with lower probability than before. For this to actually stop all such cases, you'd have to hold the lock till commit, which greatly increases the risks of deadlock.) I see no particular reason why conflicting updates like those *shouldn't* be expected to fail occasionally. regards, tom lane