↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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–20 之间未变。带单位的取值换算成了可读形式,原始的 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 进程使用的全部临时文件总大小。 现存