I came across some rather strange choices of lock levels in pg_shdepend.c. Why does shdepDropOwned() take AccessExclusiveLock on pg_shdepend? Seems like RowExclusiveLock should be sufficient. If it isn't sufficient, I wonder whether the other functions in here are taking strong enough locks.
It's probably not a good idea to have shdepReassignOwned() take only AccessShareLock on pg_shdepend. Even though the function itself merely reads the table, it is going to call functions that will take RowExclusiveLock, meaning that we're setting ourselves up for potential deadlock failures due to lock-upgrade. It'd be safer (and faster too) to just hold RowExclusiveLock through the whole operation. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster