max_stack_depth 是一个 配置参数,用于指定服务器执行堆栈的最大安全深度。
max_stack_depth 在 PostgreSQL 8.0 中添加,取代了 max_expr_depth。
默认值
max_stack_depth 的默认值为: 2MB。
用法
PostgreSQL 文档建议将 max_stack_depth 设置为比内核的最大堆栈大小设置值大约 1MB 小的值。在 Linux 上,这可以使用 ulimit -s 来确定。
在 PostgreSQL 可以确定内核限制的平台上,它不允许将 max_stack_depth 设置为高于内核限制减去 512kB 的值。但是,如果无法确定内核限制,并且设置了更高的值,那么失控的递归函数可能会导致单个后端进程崩溃。
按 PostgreSQL 版本详细信息
max_stack_depth (PostgreSQL 19)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 18)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 17)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 16)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 15)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 默认 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 14)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 13)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 12)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 11)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 10)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.6)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.5)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 | |
| 需要重启 | false |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.4)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.3)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.2)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.1)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 9.0)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 8.4)
| 设置 | 100 |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
| 枚举值 | |
| 启动值 | 100 |
| 重置值 | 100 |
| 源文件 | |
| 源行 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 8.3)
| 设置 | |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
文档: max_stack_depth
max_stack_depth (PostgreSQL 8.2)
| 设置 | |
| 单位 | kB |
| 类别 | 资源使用 / 内存 |
| 简短描述 | 以千字节为单位设置最大堆栈深度。 |
| 扩展描述 | |
| 上下文 | superuser |
| 变量类型 | 整数 |
| 来源 | 环境变量 |
| 最小值 | 100 |
| 最大值 | 2147483647 |
文档: max_stack_depth
变更历史
- PostgreSQL 8.0
- 已添加 (提交 8899a2ab)
示例
尝试在 Linux 系统上设置 max_stack_depth,其最大堆栈大小设置为 8MB
postgres=# ALTER SYSTEM SET max_stack_depth = '100MB'; ERROR: invalid value for parameter "max_stack_depth": 102400 DETAIL: "max_stack_depth" must not exceed 7680kB. HINT: Increase the platform's stack depth limit via "ulimit -s" or local equivalent.
参考资料
- PostgreSQL 文档: max_stack_depth
