CONFIGURATION PARAMETER资源消耗 / 磁盘
file_copy_method
选择数据库文件的复制方法。
Selects the file copy method.
枚举 会话 引入 18 现存至 20 devel 0 次默认值变更
版本轨迹
PostgreSQL 18 新增此参数。
默认值变迁
默认值自 PostgreSQL 18 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
指定用于复制文件的方法。可能的值包括 COPY(默认)和 CLONE(如果操作系统支持)。
此参数会影响:
CREATE DATABASE ... STRATEGY=FILE_COPYALTER DATABASE ... SET TABLESPACE ...
CLONE 使用 copy_file_range()(Linux、FreeBSD) 或 copyfile(macOS)系统调用,让内核有机会共享磁盘块, 或把工作下推到某些文件系统的较低层。
机制详解
file_copy_method 为 CREATE DATABASE ... STRATEGY=FILE_COPY 与 ALTER DATABASE ... SET TABLESPACE 选择 COPY 或 CLONE。它不会改变 SQL COPY 或普通文件读取。
CLONE 在 Linux/FreeBSD 使用 copy_file_range(),在 macOS 使用 copyfile,使支持的文件系统可以共享数据块或下推操作。可用性与实际优化取决于操作系统和文件系统;选择 CLONE 并不能证明数据块已共享。
写时复制可让初始操作很快,但后续写入仍会分配私有块,克隆也共享故障域。备份、配额与空闲空间监控必须理解文件系统语义。其 user 上下文允许按会话或事务局部修改,之后执行或重新规划的工作会读取新值。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
以 COPY 作为兼容基线。只有在完全相同的内核与文件系统上测试 CREATE DATABASE ... STRATEGY=FILE_COPY、ALTER DATABASE ... SET TABLESPACE,并验证备份、配额与空闲空间监控后才选 CLONE。
-
OLAP分析与批处理
负载类型不决定方法;clone 支持与写时复制行为才决定。CLONE 可缩短大型数据库复制,但标准化前必须同时测试初始操作与后续写放大。
-
小规格低配实例与开发机
除非明确了解文件系统 clone 语义且运维工具能识别共享 extent,否则优先 COPY。快速初始克隆仍可能在小卷上造成后续空间压力。
常见问题
- 认为 CLONE 保证写时复制共享数据块;实际优化由内核与文件系统决定。
- 期待该参数影响 SQL COPY 或普通关系读取。
- 忽略快速克隆后续的私有块分配与空闲空间压力。
- 备份、配额和文件系统工具尚不能识别共享 extent 时就使用 CLONE。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 18 ← 17 新增此参数
PostgreSQL 18 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 磁盘 4 | |||||
file_copy_method |
枚举 | 会话 | copy |
— | |
| 选择数据库文件的复制方法。 | 现存 | ||||
file_extend_method |
枚举 | 重载生效 | posix_fallocate |
— | |
| 选择扩展数据文件的方法。 | 现存 | ||||
max_notify_queue_pages |
整数 | 重启生效 | 1048576 |
— | |
| 设置 LISTEN/NOTIFY 队列最多分配的页面数。 | 现存 | ||||
temp_file_limit |
整数 | 会话(超级用户) | -1 kB |
— | |
| 限制每个 PostgreSQL 进程使用的全部临时文件总大小。 | 现存 | ||||