选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 资源消耗

CONFIGURATION PARAMETER资源消耗 / 磁盘

file_copy_method

选择数据库文件的复制方法。

Selects the file copy method.

枚举 会话 引入 18 现存至 20 devel 0 次默认值变更

类型
枚举enum
上下文
会话任何用户都可在会话内用 SET 修改
默认值
copy
枚举值
copy, clone
引入版本
18
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 f78ca6f3eb

版本轨迹

PostgreSQL 18 新增此参数。

默认值变迁

copy 18 – 20

默认值自 PostgreSQL 18 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.4 资源消耗 本站手册 官方原文

指定用于复制文件的方法。可能的值包括 COPY(默认)和 CLONE(如果操作系统支持)。

此参数会影响:

  • CREATE DATABASE ... STRATEGY=FILE_COPY

  • ALTER 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。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 18 ← 17 新增此参数

    PostgreSQL 18 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
18 copy 会话 枚举 copy, clone
19 copy 会话 枚举 copy, clone
20 沿用 copy 会话 枚举 copy, clone

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Resource Usage 资源消耗 4 个
磁盘 4
file_copy_method 枚举 会话 copy
选择数据库文件的复制方法。 现存
file_extend_method 枚举 重载生效 posix_fallocate
选择扩展数据文件的方法。 现存
max_notify_queue_pages 整数 重启生效 1048576
设置 LISTEN/NOTIFY 队列最多分配的页面数。 现存
temp_file_limit 整数 会话(超级用户) -1 kB
限制每个 PostgreSQL 进程使用的全部临时文件总大小。 现存