tencent cloud

云数据库 PostgreSQL

文档云数据库 PostgreSQLAI 能力Branch 能力PostgreSQL 18克隆功能使用指南

PostgreSQL 18克隆功能使用指南

下载
聚焦模式
字号
最后更新时间: 2026-06-12 15:10:13
云数据库 PostgreSQL 18版本引入了全新的 file_copy_method 参数,支持瞬间数据库克隆能力。该特性可将数据库克隆操作从传统的分钟/小时级降低到毫秒级,且克隆产生的额外存储开销趋近于零。本文为您介绍云数据库 PostgreSQL 18版本的克隆能力。

核心价值

性能飞跃:从“等数据”到“秒级就绪”
极速克隆将数据库环境准备从“重资产、长等待”的运维操作,变为“零成本、毫秒级”的开发者自助服务,让数据库像代码分支一样轻量、敏捷、随用随建。
成本革命:存储零膨胀
基于 Copy-on-Write(写时复制) 技术,克隆实例与源实例共享底层数据页,仅在数据发生变更时才产生增量存储。N 个克隆环境 ≠ N 倍存储成本,近乎零增量成本。
安全合规:生产隔离零风险
克隆实例与源实例完全隔离,任何写操作不回写源库。
满足“非生产环境使用真实数据”的合规要求。

适用场景

AI Agent 沙盒:为 AI 创建隔离的数据库副本进行探索性分析。
开发测试:秒级获得与生产一致的完整数据环境。
CI/CD 并行测试:为每个 Pipeline 创建独立数据库。
数据分析:克隆生产库进行复杂分析查询,不影响线上。

前提条件

数据库版本为 v18.4_r1.7 及以上版本。
支持可用区为上海九区。

操作步骤

步骤1:启用 clone 模式

方式一:会话级别(仅当前连接生效)
SET file_copy_method = clone;
方式二:实例级别(所有连接生效)
通过参数设置来实现,操作步骤可参考 设置实例参数

步骤2:执行数据库克隆

-- 终止模板库的所有活动连接(必须)
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'source_db' AND pid != pg_backend_pid();

-- 执行瞬间克隆
CREATE DATABASE clone_db TEMPLATE source_db STRATEGY FILE_COPY;

步骤3:验证克隆结果

-- 连接到克隆库
\\c clone_db

-- 验证数据完整性(示例:检查表行数)
SELECT schemaname, relname, n_live_tup
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC
LIMIT 10;

实践教程:AI Agent 沙盒工作流

以下为您演示一个典型的 AI Agent 沙盒克隆流程:
-- ============================================
-- 环境准备:确认参数设置
-- ============================================
SHOW file_copy_method;
-- 预期输出: clone

SHOW server_version;
-- 预期输出: 18.x

-- ============================================
-- 步骤 1:创建示例源数据库并写入测试数据
-- ============================================
CREATE DATABASE ai_production;
\\c ai_production

CREATE TABLE documents (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
embedding vector(3),
created_at TIMESTAMPTZ DEFAULT now()
);

INSERT INTO documents (title, content, embedding)
SELECT
'Document ' || i,
'Content for document ' || i,
('[' || (random())::text || ',' || (random())::text || ',' || (random())::text || ']')::vector
FROM generate_series(1, 100000) AS i;

-- 确认数据量
SELECT count(*) FROM documents;
-- 预期输出: 100000

SELECT pg_size_pretty(pg_database_size('ai_production'));
-- 查看数据库大小

-- ============================================
-- 步骤 2:瞬间克隆沙盒
-- ============================================
\\c postgres

-- 记录开始时间
\\timing on

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'ai_production' AND pid != pg_backend_pid();

CREATE DATABASE ai_sandbox TEMPLATE ai_production STRATEGY FILE_COPY;
-- 预期输出: CREATE DATABASE
-- 预期耗时: < 200ms(无论数据库多大)

\\timing off

-- ============================================
-- 步骤 3:在沙盒中自由操作(不影响源库)
-- ============================================
\\c ai_sandbox

-- AI Agent 可以安全地执行任意操作
DELETE FROM documents WHERE id > 50000;
ALTER TABLE documents ADD COLUMN ai_score FLOAT DEFAULT 0;
UPDATE documents SET ai_score = random() WHERE id <= 1000;

-- 验证沙盒修改
SELECT count(*) FROM documents;
-- 预期输出: 50000(已删除一半)

-- ============================================
-- 步骤 4:验证源库数据完整性(未受影响)
-- ============================================
\\c ai_production

SELECT count(*) FROM documents;
-- 预期输出: 100000(源库数据完好无损)

-- 确认源库没有 ai_score 列
SELECT column_name FROM information_schema.columns
WHERE table_name = 'documents' ORDER BY ordinal_position;
-- 不包含 ai_score

-- ============================================
-- 步骤 5:清理沙盒
-- ============================================
\\c postgres
DROP DATABASE ai_sandbox;

性能测试

测试数据

数据库大小
克隆模式
传统复制
提升倍数
3.8GB(200万行)
56.8ms
1,274ms
22x

SQL

说明:
将 your_db_name 替换为您要克隆的数据库名。建议选一个 GB 级以上的数据库。
-- 1. 查看当前实例已有哪些库,选一个作为模板
\\l

-- 2. 查看模板库大小
SELECT pg_size_pretty(pg_database_size('your_db_name')) AS db_size;

-- 3. 测试克隆模式(file_copy_method = clone)
\\timing on
SET file_copy_method = clone;
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'your_db_name' AND pid != pg_backend_pid();
CREATE DATABASE test_clone TEMPLATE your_db_name STRATEGY FILE_COPY;
\\timing off

-- 4. 测试传统复制(file_copy_method = copy)
\\timing on
SET file_copy_method = copy;
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'your_db_name' AND pid != pg_backend_pid();
CREATE DATABASE test_copy TEMPLATE your_db_name STRATEGY FILE_COPY;
\\timing off

-- 5. 清理
DROP DATABASE test_clone;
DROP DATABASE test_copy;

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈