系统允许的总锁数
SELECT
(SELECT setting::int FROM pg_settings WHERE name = 'max_locks_per_transaction') *
(SELECT setting::int FROM pg_settings WHERE name = 'max_connections') +
(SELECT setting::int FROM pg_settings WHERE name = 'max_prepared_transactions');
当锁大于上述数据
dynadot=# SELECT
count( pid)
FROM pg_locks ;count
-------563
(1 row)
就会出现
ERROR: out of shared memory
一般是调大max_locks_per_transaction
参考下方的官方文档。
20.12. 锁管理
大多数会出现在“查询一个有很多子表的父表”这种情况,会有大量的锁。所以此时会报错。