# 错误：共享内存不足 提示：您可能需要增加 max_pred_locks_per_transaction。

- **ID:** `database/postgresql-max-pred-locks-per-transaction`
- **领域:** database
- **类别:** resource_error
- **验证级别:** ai_generated
- **修复率:** 85%

## 根因

PostgreSQL 的谓词锁定（predicate locking）用于可重复读隔离级别下的序列化事务，当事务持有过多谓词锁时，共享内存耗尽，导致错误。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| PostgreSQL 13.10 | active | — | — |
| PostgreSQL 14.7 | active | — | — |
| PostgreSQL 15.3 | active | — | — |

## 解决方案

1. ```
   编辑 postgresql.conf，增加 max_pred_locks_per_transaction 值（例如从 64 增加到 128 或 256），然后重启 PostgreSQL 服务。
   ```
2. ```
   降低事务隔离级别为 READ COMMITTED，避免使用谓词锁定：SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
   ```

## 无效尝试

- **** — 增加 max_locks_per_transaction 而不是 max_pred_locks_per_transaction，不解决谓词锁问题。 (75% 失败率)
- **** — 重启 PostgreSQL 而不调整配置，临时释放内存但问题会重复出现。 (80% 失败率)
