postgresql/src/include/storage
Tom Lane 6faca9ae28 Avoid deadlock during orphan temp table removal.
If temp tables have dependencies (such as sequences) then it's
possible for autovacuum's cleanup of orphan temp tables to deadlock
against an incoming backend that's trying to clean out the temp
namespace for its own use.  That can happen because RemoveTempRelations'
performDeletion call can visit objects within the namespace in
an order different from the order in which a per-table deletion
will visit them.

To fix, observe that performDeletion will begin by taking an exclusive
lock on the temp namespace (even though it won't actually delete it).
So, if we can get a shared lock on the namespace, we can be sure we're
not running concurrently with RemoveTempRelations, while also not
conflicting with ordinary use of the namespace.  This requires
introducing a conditional version of LockDatabaseObject, but that's no
big deal.  (It's surprising we've got along without that this long.)

Report and patch by Mikhail Zhilin.  Back-patch to all supported
branches.

Discussion: https://postgr.es/m/c43ce028-2bc2-4865-9b89-3f706246eed5@postgrespro.ru
2024-04-02 14:59:32 -04:00
..
.gitignore When trace_lwlocks is used, identify individual lwlocks by name. 2015-09-11 14:01:39 -04:00
barrier.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
block.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
buf.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
buf_internals.h Add missing PGDLLIMPORT markings 2024-01-16 13:53:28 +02:00
buffile.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
bufmgr.h Provide vectored variant of ReadBuffer(). 2024-04-03 00:23:20 +13:00
bufpage.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
bulk_write.h Fix compiler warning on typedef redeclaration 2024-02-23 17:39:27 +02:00
checksum.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
checksum_impl.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
condition_variable.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
copydir.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
dsm.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
dsm_impl.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
dsm_registry.h Introduce the dynamic shared memory registry. 2024-01-19 14:24:36 -06:00
fd.h Return ssize_t in fd.c I/O functions. 2024-03-02 12:09:28 +13:00
fileset.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
freespace.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fsm_internals.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
indexfsm.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
ipc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
item.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
itemid.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
itemptr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
large_object.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
latch.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
lmgr.h Avoid deadlock during orphan temp table removal. 2024-04-02 14:59:32 -04:00
lock.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
lockdefs.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
lwlock.h Use TidStore for dead tuple TIDs storage during lazy vacuum. 2024-04-02 10:15:37 +09:00
lwlocklist.h Rework lwlocknames.txt to become lwlocklist.h 2024-03-20 11:55:20 +01:00
md.h Introduce a new smgr bulk loading facility. 2024-02-23 16:10:51 +02:00
meson.build Rework lwlocknames.txt to become lwlocklist.h 2024-03-20 11:55:20 +01:00
off.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_sema.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_shmem.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pmsignal.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
predicate.h Improve performance of subsystems on top of SLRU 2024-02-28 17:05:31 +01:00
predicate_internals.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
proc.h Allow a no-wait lock acquisition to succeed in more cases. 2024-03-14 08:56:06 -04:00
procarray.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
proclist.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
proclist_types.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
procnumber.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
procsignal.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
read_stream.h Provide API for streaming relation data. 2024-04-03 00:49:46 +13:00
reinit.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
relfilelocator.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
s_lock.h Remove AIX support 2024-02-28 15:17:23 +04:00
sharedfileset.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
shm_mq.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
shm_toc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
shmem.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
sinval.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
sinvaladt.h Redefine backend ID to be an index into the proc array 2024-03-03 19:37:28 +02:00
smgr.h Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
spin.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
standby.h Fix false reports in pg_visibility 2024-03-14 13:12:05 +02:00
standbydefs.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
sync.h Update copyright for 2024 2024-01-03 20:49:05 -05:00