PostgreSQL笔记17:逻辑备份工具链与性能优化实践

PostgreSQL 17新特性与升级实践:增量备份、逻辑复制、性能优化 数据库版本迭代中,稳定性与可运维性始终是生产环境选型的核心考量。PostgreSQL 作为主流开源关系型数据库,其大版本升级往往伴随备份恢复、复制拓扑和并发性能的变化。PostgreSQL 17 在内核层面将增量备份能力引入 pg_basebackup,基于备份清单实现数据块级差异传输,显著降低备份窗口和存储开销;逻辑复制则新增级联转发与故障转移,为跨地域容灾和多活架构提供更灵活的链路设计。VACUUM 并发优化与动态内存配额让高并发写入场景下性能更平稳,B-tree 索引和排序路径的改进也直接惠及常见查询 阅读详情

纲要

  • pg_dump — 单数据库逻辑备份工具
    • 输出格式:plain(-Fp)、custom(-Fc)、directory(-Fd)、tar(-Ft)
    • 核心选项:-a(--data-only)、-s(--schema-only)、-t(--table)、-T(--exclude-table)、-n(--schema)、-j(--jobs)、--lock-wait-timeout、--snapshot
    • 管道传输与跨版本迁移
  • pg_dumpall — 实例级逻辑备份工具
    • 全局对象备份:roles、tablespaces、配置参数权限
    • -g(--globals-only)选项
  • pg_restore — 归档格式恢复工具
    • 并行恢复(-j)
    • 选择性恢复(-t、-n、-P)
  • COPY与\copy — 高性能数据导入导出
    • 服务端COPY与客户端\copy的区别
    • PostgreSQL 17 ON_ERROR选项(stop / ignore)
  • 并行备份与加速策略
    • directory格式(-Fd)是唯一支持并行转储的格式
    • 单表大表的加速方案:pg_export_snapshot() + 多事务并行COPY
  • 第三方工具生态
    • pgcopydb — 全量迁移与克隆
    • pg_dumpbinary / pg_restorebinary — 二进制格式转储

pg_dump:单数据库逻辑备份

pg_dump是PostgreSQL官方自带的单数据库逻辑备份工具,即使在数据库并发读写期间也能创建一致性备份,且不会阻塞其他用户的访问。pg_dump仅转储单个数据库;如需备份整个集群或集群范围内的全局对象(如角色和表空间),应使用pg_dumpall。

输出格式

pg_dump支持四种输出格式,通过-F或--format选项指定:

格式选项特点适用场景
plain(纯文本)-Fp生成SQL脚本,可用psql执行,可手动编辑跨版本迁移、简单备份
custom(自定义)-Fc压缩存储,支持pg_restore选择性恢复和并行恢复生产环境推荐
directory(目录)-Fd每个表生成独立文件,唯一支持并行转储的格式大数据库并行备份
tar-Fttar归档格式,支持pg_restore兼容性需求

custom和directory格式是最灵活的两种输出格式,支持对归档项目的选择和重新排序,支持并行恢复,且默认启用压缩。

常用选项

以下为pg_dump的核心选项:

选项简写说明
--data-only-a仅转储数据,不转储结构定义
--schema-only-s仅转储结构定义,不转储数据
--table=TABLE-t仅转储指定表(可多次指定)
--exclude-table=TABLE-T排除指定表
--schema=SCHEMA-n仅转储指定模式
--jobs=N-j并行转储的工作进程数(仅directory格式有效)
--lock-wait-timeout=TIME—获取表锁的超时时间
--snapshot=SNAPSHOT—使用指定的同步快照
--file=FILENAME-f指定输出文件
--clean-c在创建对象前先DROP(仅纯文本格式有效)

基础示例

创建测试表并插入数据:

CREATE TABLE t1 (
    id INT,
    info TEXT
);

INSERT INTO t1 SELECT generate_series(1, 10), 'data_' || generate_series(1, 10);

仅导出数据(-a) :

pg_dump -a -t t1 -f t1_data_only.sql postgres

仅导出结构(-s) :

pg_dump -s -t t1 -f t1_schema_only.sql postgres

导出为纯文本格式:

pg_dump -Fp -t t1 -f t1_dump.sql postgres

查看导出的SQL脚本内容:

head -20 t1_dump.sql

输出示例:

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';

CREATE TABLE public.t1 (
    id integer,
    info text
);

COPY public.t1 (id, info) FROM stdin;
1	data_1
2	data_2
...

管道传输:无落地备份与恢复

pg_dump默认输出到标准输出,可借助Linux管道特性实现不落地的数据库迁移:

# 创建目标数据库
createdb mydb

# 通过管道直接将备份数据灌入目标库
pg_dump -Fp postgres | psql -d mydb

此种方式适用于小数据量的快速迁移场景。

pg_dumpall:实例级逻辑备份

pg_dumpall用于将整个PostgreSQL集群的所有数据库转储到一个脚本文件中。其实现方式是依次为集群中的每个数据库调用pg_dump。

与pg_dump的核心区别在于:pg_dumpall还会转储所有数据库通用的全局对象(global objects),包括数据库角色(roles)、表空间(tablespaces)以及配置参数的权限授予(privilege grants for configuration parameters)。pg_dump不保存这些对象。

全局对象备份

使用-g或--globals-only选项仅转储全局对象(角色和表空间),不转储任何数据库:

pg_dumpall -g > globals.sql

查看输出内容:

cat globals.sql

输出示例:

--
-- PostgreSQL database cluster dump
--

SET default_transaction_read_only = off;

--
-- Roles
--

CREATE ROLE postgres;
ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS;

CREATE ROLE app_user;
ALTER ROLE app_user WITH NOLOGIN;

注意事项

  • pg_dumpall需要多次连接PostgreSQL服务器(每个数据库一次),使用密码认证时每次都会提示输入密码,建议配置~/.pgpass文件。
  • 执行完整的pg_dumpall备份通常需要数据库超级用户权限。

pg_restore:归档格式恢复工具

pg_restore用于从pg_dump以非纯文本格式(custom、directory、tar)创建的归档文件中恢复PostgreSQL数据库。它支持两种运行模式:

  1. 直接恢复模式:指定目标数据库名称,直接将归档内容恢复到该数据库
  2. 脚本生成模式:不指定目标数据库,生成包含重建数据库所需SQL命令的脚本文件

并行恢复

pg_restore支持通过-j或--jobs选项并发执行恢复过程中最耗时的步骤——即加载数据、创建索引和创建约束:

# 并行恢复,使用4个并发工作进程
pg_restore -d target_db -j 4 -Fd ./backup_dir

选择性恢复

pg_restore支持仅恢复指定的表、模式或函数:

# 仅恢复特定表
pg_restore -d target_db -t t1 -Fc backup.dump

# 仅恢复特定模式
pg_restore -d target_db -n public -Fc backup.dump

COPY与\copy:高性能数据导入导出

COPY是PostgreSQL中在表和文件之间批量移动数据的高性能命令。

COPY vs \copy

特性COPY(服务端)\copy(客户端,psql元命令)
执行位置PostgreSQL服务器psql客户端
文件路径服务器文件系统路径客户端文件系统路径
权限要求PostgreSQL服务进程用户需有文件读写权限客户端用户需有文件读写权限
适用场景服务端本地文件操作远程客户端文件操作

基础用法

导出数据:

-- 导出整个表
COPY t1 TO '/tmp/t1.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');

-- 导出查询结果
COPY (SELECT * FROM t1 WHERE id < 5) TO '/tmp/t1_filtered.csv' WITH (FORMAT CSV, HEADER true);
# 查看导出结果
cat /tmp/t1.csv

导入数据:

-- 从CSV文件导入
COPY t1 FROM '/tmp/t1.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');

psql中使用\copy :

-- 导出到客户端本地文件
\copy t1 TO 't1.csv' WITH (FORMAT CSV, HEADER true);

-- 从客户端本地文件导入
\copy t1 FROM 't1.csv' WITH (FORMAT CSV, HEADER true);

性能优势

COPY命令针对批量数据加载进行了高度优化。根据PostgreSQL官方文档,使用COPY加载大量行几乎总是比使用INSERT快,即使使用了PREPARE并将多个插入分批到单个事务中。COPY在与之前的CREATE TABLE或TRUNCATE命令在同一事务中使用时速度最快。

性能提升主要源于:

  • 减少网络往返延迟
  • 避免重复的SQL解析开销
  • 减少事务和上下文切换开销
  • 内部针对批量操作的缓冲区优化

PostgreSQL 17 增强:ON_ERROR 选项

在PostgreSQL 17之前,COPY FROM在导入过程中如果遇到任何数据转换错误(如类型不兼容、异常字符等),整个事务会回滚,已导入的数据全部不可见,变为死元组需要VACUUM清理。这对于大规模数据导入场景极为不利。

PostgreSQL 17引入了ON_ERROR选项,允许指定错误处理策略:

  • ON_ERROR stop(默认):遇到错误时失败并回滚
  • ON_ERROR ignore:跳过错误行,继续处理后续数据
-- PostgreSQL 17+:忽略类型转换错误,继续导入
COPY t1 FROM '/data/import.csv' 
WITH (FORMAT CSV, HEADER true, ON_ERROR ignore);

当设置为ignore时,COPY会跳过无法转换的行并在NOTICE消息中报告被跳过的行数。此选项仅适用于COPY FROM且FORMAT为text或csv时。

并行备份与性能优化

pg_dump 并行转储

pg_dump的-j或--jobs选项支持并行转储,但仅适用于directory格式(-Fd) 。这是因为directory格式是唯一允许多个进程同时写入数据的输出格式。

# 使用4个并行工作进程进行备份
pg_dump -Fd -j 4 -f ./my_backup postgres

并行转储的本质是表级并行:每个工作进程负责转储一个或多个表。如果数据库中只有一个大表(如200GB),即使设置-j 10,该表的转储仍然由单个进程完成,无法实现表内并行。

单表大表的加速方案:pg_export_snapshot

针对单个大表的加速备份,可利用PostgreSQL的快照导出功能。

核心原理:

  1. 在REPEATABLE READ隔离级别下开启一个事务
  2. 使用pg_export_snapshot()导出当前事务的快照ID
  3. 多个并发事务使用相同的快照ID,确保看到一致的数据视图
  4. 每个事务使用COPY导出表的不同数据分片
-- 会话1:导出快照
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT pg_export_snapshot();
-- 返回快照ID,如 '00000017-0000002F-1'
-- 会话2、3、...:使用相同快照,并行导出不同分片
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION SNAPSHOT '00000017-0000002F-1';
COPY (SELECT * FROM large_table WHERE id BETWEEN 1 AND 1000000) TO '/data/part1.csv' WITH (FORMAT CSV);
COMMIT;

pg_dump本身也支持--snapshot选项,可指定使用已导出的快照。结合--exclude-table排除已通过COPY并行导出的表,可实现混合加速策略。

pgcopydb:全量迁移工具

pgcopydb是一个将整个PostgreSQL数据库从源实例复制到目标实例的工具。它本质上利用了pg_dump的能力,同时实现了:

  • 以目录格式并行转储
  • 并行恢复
  • 克隆(clone)和分叉(fork)功能
  • 变更回放(change replay)
# 全量克隆数据库
pgcopydb clone --source "postgresql://user@source:5432/db" \
               --target "postgresql://user@target:5432/db"

pg_dumpbinary:二进制格式转储

pg_dump在处理某些特殊数据类型时存在限制:

  • bytea类型数据通过escape/hex编码后的总大小超过1GB时无法导出
  • 某些自定义类型或包含\0字节的数据可能被截断

pg_dumpbinary将PostgreSQL数据库以二进制格式转储,需使用配套的pg_restorebinary恢复。对于常规场景,仍应优先使用官方自带的pg_dump/pg_restore。

API 速览

pg_dump 命令行接口

方法签名:

pg_dump [connection-option...] [option...] [dbname]

核心参数:

参数类型说明
-f, --file=FILENAMEstring输出文件路径
`-F, --format=pcd
-j, --jobs=Ninteger并行工作进程数(仅directory格式)
-a, --data-onlyflag仅转储数据
-s, --schema-onlyflag仅转储结构
-t, --table=TABLEstring指定要转储的表(可重复)
-T, --exclude-table=TABLEstring排除指定表(可重复)
-n, --schema=SCHEMAstring指定要转储的模式(可重复)
-c, --cleanflag恢复前先DROP对象(仅纯文本格式)
--lock-wait-timeout=TIMEstring获取锁的超时时间
--snapshot=SNAPSHOTstring使用指定的同步快照
-v, --verboseflag输出详细信息

返回值:命令成功时返回0,失败时返回非0值。

代码示例:

# 使用custom格式备份,启用压缩
pg_dump -Fc -f mydb.dump mydb

# 使用directory格式并行备份(4个进程)
pg_dump -Fd -j 4 -f ./backup_dir mydb

# 仅备份指定表的结构
pg_dump -s -t orders -t customers -f schema.sql mydb

# 带超时选项的备份
pg_dump --lock-wait-timeout=10s -f mydb.sql mydb

pg_dumpall 命令行接口

方法签名:

pg_dumpall [connection-option...] [option...]

核心参数:

参数类型说明
-f, --file=FILENAMEstring输出文件路径
-g, --globals-onlyflag仅转储全局对象(角色和表空间)
-a, --data-onlyflag仅转储数据
-c, --cleanflag恢复前先DROP所有对象
-O, --no-ownerflag不输出对象所有者设置
-r, --roles-onlyflag仅转储角色

代码示例:

# 完整备份整个集群
pg_dumpall -f cluster_full.sql

# 仅备份全局对象
pg_dumpall -g -f globals_only.sql

# 备份时不包含所有者信息(便于非超级用户恢复)
pg_dumpall -O -f cluster_no_owner.sql

pg_restore 命令行接口

方法签名:

pg_restore [connection-option...] [option...] [filename]

核心参数:

参数类型说明
-d, --dbname=DBNAMEstring目标数据库名称
-f, --file=FILENAMEstring输出脚本文件
-j, --jobs=Ninteger并行恢复的工作进程数
-a, --data-onlyflag仅恢复数据
-c, --cleanflag恢复前先DROP对象
-C, --createflag先创建目标数据库
-t, --table=TABLEstring仅恢复指定表
-n, --schema=SCHEMAstring仅恢复指定模式
-P, --function=NAMEstring仅恢复指定函数
-l, --listflag列出归档内容(TOC)

代码示例:

# 直接恢复到数据库
pg_restore -d target_db -Fc mydb.dump

# 并行恢复(4个进程)
pg_restore -d target_db -j 4 -Fd ./backup_dir

# 先清理再恢复
pg_restore -d target_db -c -Fc mydb.dump

# 仅列出归档内容(TOC)
pg_restore -l -Fd ./backup_dir

COPY SQL 命令

方法签名:

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]

COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
[ WHERE condition ]

核心选项:

选项类型说明
FORMATtext/csv/binary数据格式
DELIMITERcharacter字段分隔符
NULLstringNULL值的表示
HEADERbooleanCSV是否包含表头
QUOTEcharacterCSV引用字符
ESCAPEcharacterCSV转义字符
ENCODINGstring文件编码
ON_ERRORstop/ignore错误处理策略(PostgreSQL 17+)

代码示例:

-- 导出为CSV(含表头)
COPY t1 TO '/tmp/t1.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',');

-- 导出查询结果
COPY (SELECT id, info FROM t1 WHERE id <= 5) TO '/tmp/t1_filtered.csv' WITH (FORMAT CSV);

-- 从CSV导入(PostgreSQL 17+ 支持ON_ERROR)
COPY t1 FROM '/tmp/t1.csv' WITH (FORMAT CSV, HEADER true, ON_ERROR ignore);

-- 使用psql \copy(客户端路径)
\copy t1 TO 't1.csv' WITH (FORMAT CSV, HEADER true);
\copy t1 FROM 't1.csv' WITH (FORMAT CSV, HEADER true);

Demo 完整示例

本Demo演示如何使用pg_dump和pg_restore完成一个完整的数据库备份与恢复流程,涵盖custom格式备份、并行恢复以及COPY数据导出。

环境准备

# 创建测试数据库
createdb demo_db

# 连接到数据库并创建测试表
psql -d demo_db <<EOF
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT NOT NULL,
    amount NUMERIC(10,2),
    created_at TIMESTAMP DEFAULT NOW()
);

INSERT INTO orders (customer_name, amount)
SELECT 'Customer_' || generate_series(1, 10000),
       round((random() * 1000)::numeric, 2)
FROM generate_series(1, 10000);

CREATE TABLE order_items (
    id SERIAL PRIMARY KEY,
    order_id INT REFERENCES orders(id),
    product_name TEXT,
    quantity INT,
    price NUMERIC(10,2)
);

INSERT INTO order_items (order_id, product_name, quantity, price)
SELECT (random() * 10000)::INT + 1,
       'Product_' || generate_series(1, 50000),
       (random() * 10)::INT + 1,
       round((random() * 100)::numeric, 2)
FROM generate_series(1, 50000);

-- 确认数据量
SELECT 'orders' AS table_name, COUNT(*) FROM orders
UNION ALL
SELECT 'order_items', COUNT(*) FROM order_items;
EOF

备份

# 使用custom格式备份(默认压缩,支持并行恢复)
pg_dump -Fc -f demo_db.dump demo_db

# 查看备份文件大小
ls -lh demo_db.dump

# 使用directory格式并行备份(4个进程)
pg_dump -Fd -j 4 -f ./demo_backup_dir demo_db

# 查看目录结构
tree ./demo_backup_dir
./demo_backup_dir
├── 44814.dat.gz
├── 44815.dat.gz
├── 44816.dat.gz
├── 44817.dat.gz
├── 44818.dat.gz
├── toc.dat
└── ...

恢复

# 创建目标数据库
createdb demo_db_restored

# 从custom格式恢复
pg_restore -d demo_db_restored -Fc demo_db.dump

# 验证恢复结果
psql -d demo_db_restored -c "SELECT 'orders' AS table_name, COUNT(*) FROM orders UNION ALL SELECT 'order_items', COUNT(*) FROM order_items;"

# 并行恢复(从directory格式,4个进程)
pg_restore -d demo_db_restored -j 4 -Fd ./demo_backup_dir

使用COPY导出数据

# 导出orders表为CSV
psql -d demo_db -c "\copy orders TO 'orders.csv' WITH (FORMAT CSV, HEADER true)"

# 导出order_items表(仅部分列)
psql -d demo_db -c "\copy (SELECT id, order_id, product_name, quantity FROM order_items) TO 'order_items_subset.csv' WITH (FORMAT CSV, HEADER true)"

# 查看导出文件行数
wc -l orders.csv order_items_subset.csv

运行说明

  1. 环境要求:PostgreSQL 14+(ON_ERROR特性需要PostgreSQL 17+)
  2. 执行顺序:环境准备 → 备份 → 恢复 → COPY导出
  3. 权限要求:执行pg_dump和pg_restore需要数据库连接权限;COPY到文件需要PostgreSQL服务进程对目标目录有写入权限

技术点总结

技术点说明
pg_dump -Fccustom格式,压缩存储,支持pg_restore选择性恢复和并行恢复
pg_dump -Fd -jdirectory格式 + 并行转储,适合大数据库
pg_restore -j并行恢复,充分利用多核CPU
pg_restore -l列出归档TOC,可用于选择性恢复前的预览
\copypsql客户端命令,数据导出到客户端本地文件
COPY WITH (FORMAT CSV, HEADER true)CSV格式导出,含表头,便于与其他工具交互

项目难点与解决方案

核心难点

  1. 单表大表的并行备份:pg_dump的并行能力仅限于表级,单表无法通过-j实现并行加速
  2. 导入过程中的数据质量问题:COPY FROM在PostgreSQL 17之前遇到任何错误即回滚全部事务,大规模导入时风险极高
  3. 特殊数据类型的导出限制:pg_dump无法处理超过1GB的bytea类型数据以及包含\0字节的自定义类型
  4. 一致性快照的跨进程共享:多进程并行备份时需要确保所有进程看到同一时间点的数据

解决方案

难点解决方案适用版本
单表大表备份慢使用pg_export_snapshot()导出快照,多事务并行COPY导出不同数据分片PostgreSQL 9.2+
COPY导入错误回滚PostgreSQL 17+ 使用ON_ERROR ignore跳过错误行PostgreSQL 17+
特殊数据类型导出使用pg_dumpbinary/pg_restorebinary进行二进制格式转储第三方工具
多进程一致性pg_dump --snapshot或手动SET TRANSACTION SNAPSHOTPostgreSQL 9.2+

广度

本文覆盖了PostgreSQL逻辑备份的完整工具链:pg_dump(单库)、pg_dumpall(实例级)、pg_restore(恢复)、COPY/\copy(高性能导入导出),以及第三方扩展工具pgcopydb和pg_dumpbinary。

深度

深入剖析了各工具的核心参数、格式差异、性能特性,重点讲解了:

  • directory格式是唯一支持并行转储的格式
  • 单表大表通过pg_export_snapshot()实现伪并行备份的原理
  • PostgreSQL 17 ON_ERROR选项的设计动机和使用方式
  • COPY相比INSERT的性能优势来源

复杂度

涉及的技术复杂度包括:

  • 多格式输出(plain/custom/directory/tar)的选型权衡
  • 并行备份与恢复的参数调优(-j)
  • 快照导出与跨事务一致性保证
  • 服务端COPY与客户端\copy的权限和路径差异

官方文档

参考链接

总结

本文系统梳理了PostgreSQL逻辑备份的完整工具链。pg_dump作为单数据库逻辑备份的核心工具,支持plain、custom、directory和tar四种输出格式,其中custom和directory格式支持pg_restore的选择性恢复与并行恢复,directory格式是唯一支持并行转储的格式。pg_dumpall扩展了pg_dump的能力,可备份整个集群及全局对象(角色、表空间、配置参数权限)。

COPY命令是PostgreSQL官方提供的高性能批量数据传输工具,在批量加载场景下性能显著优于INSERT;PostgreSQL 17引入的ON_ERROR选项解决了大规模导入时错误即回滚的痛点。对于单表极大的场景,可借助pg_export_snapshot()导出快照并结合多事务并行COPY实现加速;对于特殊数据类型(如超大bytea),可选用pg_dumpbinary进行二进制格式转储。

PostgreSQL 17深度解析(从17.0-17.4) 通过深度解析PostgreSQL 17的演进,我们可以看到其在**高并发处理、数据安全、Oracle兼容性**等方面的显著提升。对于技术团队而言,及时升级并调优PostgreSQL 17,将大幅提升系统性能和可靠性,为业务增长提供坚实支撑。 阅读详情

相关推荐

PostgreSQL17(最新版)安装部署

Postgres作为最先进的开源数据库(the latest version of the world’s most advanced open source database.**),**2024年7月,Stackoverflow 2024年度调查报告发布,超过6万名数据库开发人员参与了Stackoverflow年度数据库使用调查。报告显示,有48.7%的开发者正在使用PostgreSQL,并连续第二年成为最受欢迎的数据库。

m0_74823983的博客 1559

使用`pgcopydb`: 高效迁移和备份PostgreSQL数据库的利器

在处理大规模的数据库操作时,高效、可靠的数据迁移和备份策略至关重要。为此,我们向您推荐一个名为`pgcopydb`的开源工具,它是一个Python库,专为PostgreSQL数据库设计,以实现快速、批量的数据复制和恢复。该项目可在上找到。 ## 项目简介 `pgcopydb`的核心目标是提供一种比传统COPY命令更强大的方式来导入和导出数据,尤其是在处理大型表或者需要跨服务器转移数据时。该库利...

gitblog_00031的博客 743

PostgreSQL 17新特性与升级实战:稳定性、增量备份及性能优化

数据库版本升级是运维工作中的关键环节,直接影响系统的稳定性与性能。PostgreSQL作为开源关系型数据库的标杆,其新版本往往在核心机制与工具链上带来重要改进。PostgreSQL 17正式版引入了官方原生增量备份能力,基于backup_manifest文件实现差异数据同步,同时增强了逻辑复制工具链,并优化了查询内存统计与并行VACUUM FULL等机制。这些特性从原理上降低了备份恢复的复杂度,提升了高可用场景下的数据一致性保障,并为性能调优提供了更精确的观测手段。在实际工程中,无论是通过pg_baseba

weixin_31742871的博客 309

【亲测免费】 pgcopydb:PostgreSQL数据库高效迁移工具

pgcopydb 是一个专为 PostgreSQL 数据库设计的强大工具,旨在简化并加速数据库从源服务器到目标服务器的复制过程。它超越了传统的 `pg_dump` 和 `pg_restore` 功能,提供了更高效的数据流处理,支持并发数据传输和索引构建,从而实现了数据库副本的快速创建。此外,pgcopydb 还具备在线迁移能力,通过利用 PostgreSQL 的逻辑解码功能,可以捕捉并重放源数据库...

gitblog_01168的博客 1255

PostgreSQL:万字详解逻辑备份的并行与压缩技巧

PostgreSQL逻辑备份通过pg_dump和pg_dumpall工具将数据库导出为SQL脚本或自定义格式文件,具有跨平台兼容和选择性恢复优势。备份支持四种格式:Plain SQL(默认)、Custom(二进制并行恢复)、Directory(多文件并行)和Tar。针对大型数据库,可采用并行恢复(pg_restore -j)和外部压缩(如zstd、pigz)提升性能。PostgreSQL 15+的--snapshot选项支持多进程一致性备份。优化建议包括:选择Custom/Directory格式、使用zst

数据知道的博客 1924

智慧工地算法视频分析服务器区域入侵检测AI视频分析技术在煤矿的实战应用

通过实时分析和处理井下视频资料,智慧矿山算法视频分析服务器不仅能够及时发现并预警人员违规行为和设备异常状况,还能够通过智能分析预防潜在的安全风险,从而显著提高煤矿的安全管理水平和生产效率。

EasyDarwin开源社区技术博客 562

pgcopydb:高效数据库迁移的利器

`pgcopydb` 是一个自动化工具,旨在简化并加速从源 PostgreSQL 数据库到目标数据库的迁移过程。它通过结合 `pg_dump` 和 `pg_restore` 的强大功能,并在此基础上实现多进程数据流复制,从而显著提高了数据库迁移的速度和效率。`pgcopydb` 不仅支持离线迁移,还通过 Change Data Capture (CDC) 技术实现了在线迁移,确保数据迁移过程中业务...

gitblog_01149的博客 1110

Unity 第一人称视角控制移动、旋转

第一人称视角操作此功能主要是借鉴YouTube,写的蛮好我就搬运过来让大家也试试。

qq_36515472的博客 4202

postgresql数据迁移工具pgcopydb

pgcopydb是一款专为PostgreSQL设计的开源数据库迁移工具,支持9.5到16版本的零停机迁移和增量同步。本文介绍了使用Docker部署pgcopydb的实践方案:先获取官方镜像并保存备份,通过容器化方式执行迁移任务。详细讲解了全量迁移(clone)和增量同步(follow)的命令参数配置,包括并行作业设置、扩展处理等注意事项。还涵盖迁移后的关键操作:数据追平处理、资源清理、源库与目标库的结构/数据比对等验证步骤。该方法有效解决了老系统依赖问题,提供了一套完整的PostgreSQL数据库迁移解决方

weixin_41690116的博客 1182

从音频录制到智能手表:Sigma-Delta ADC是如何在低功耗场景下‘欺骗’噪声的?

本文深入解析Sigma-Delta ADC在智能穿戴设备中的低功耗高精度实现原理,重点介绍其通过过采样和噪声整形技术‘欺骗’噪声的独特方法。以TWS耳机和医疗级健康监测为例,展示该技术如何在有限功耗预算下实现专业级信号采集,为消费电子设计提供关键解决方案。

weixin_30825581的博客 389

离散数学 --- 图论基础 --- 图的同构,通路与回路,可达性与最短通路

同一个图(这里的图是抽象的数学定义)可以有不同的图形表示方法1.重数:两点之间的平行边的个数1.得到 n!的过程,一个图中的一个结点在另一个图中对应的结点有n种可能(黄框中定义的图来讨论),这个对应好后下一个结点有 n - 1 种可能,再下一个有n-2种,直到最后一个为1,所有可能的结果就等于 n * (n - 1) *(n - 2)*....*1 = n!2.虽然说找对应结点很困难,但不是没有规律可循的。比如1.两个相互对应的结点的度数要相同;

qq_51947882的博客 7443

PostgreSQL数据库高效迁移终极指南:pgcopydb全面解析

pgcopydb是一款功能强大的PostgreSQL数据库迁移工具,被誉为"pg_dump | pg_restore增强版"。它能够帮助用户快速、安全地将PostgreSQL数据库迁移到目标服务器,大大提升迁移效率和数据完整性。本文将为您详细介绍pgcopydb的核心功能、安装步骤、使用方法以及最佳实践,让您轻松掌握这一数据库迁移利器。 ## 为什么选择pgcopydb进行数据库迁移? 在数据

gitblog_00186的博客 419

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

PostgreSQL 17:新特性与性能优化深度解析

PostgreSQL 17带来了众多激动人心的新特性和性能优化,从块级别增量备份到WAL锁的改进,都体现了PostgreSQL团队对数据库性能和可用性的不懈追求。对于开发者和数据库管理员来说,及时升级到PostgreSQL 17将带来显著的性能提升和功能增强。PostgreSQL 17 官方文档PostgreSQL 全球开发组技术博客数据库性能优化实践指南(第3版)

进击的码农 3878

防护装备穿戴检查:基于YOLOv8与UI界面的深度学习应用

通过结合YOLOv8模型与UI界面,本系统实现了防护装备穿戴检查的自动化。该系统能够快速识别工作人员是否正确佩戴了所需的防护装备,帮助提高安全管理水平。未来,随着技术的发展,防护装备穿戴检查系统将在更多领域得到应用,如工业现场、建筑工地等,实现更加精确和高效的实时监控。

YOLO 355

48、住宅抵押贷款支持证券的定价、风险评估与结构化设计

本文深入探讨了住宅抵押贷款支持证券(RMBS)的定价、风险评估与结构化设计。内容涵盖提高定价准确性的方差缩减方法,如准蒙特卡罗序列的应用;分析RMBS面临的利率风险、信用风险和模型风险,并提出相应的度量与应对策略;介绍利用动态规划优化CMO分层结构以最大化发行利润的方法。同时总结了RMBS的基本类型、定价流程及市场发展趋势,为投资者和发行人提供全面的决策支持。

quiet的专栏 156

PostgreSQL 17 新特性详解与技术解读

VACUUM省内存,JSON转表强;备份增量快,复制更高可用;权限粒度细,监控更全面。PostgreSQL 17 在数据维护(VACUUM)、结构化/半结构化数据处理(SQL/JSON)、数据安全与高可用(增量备份、逻辑复制)、权限与运维(MAINTAIN 权限、事务超时)、监控与可观测性等领域全面升级。通过新工具和参数,极大简化了运维流程,降低了迁移和升级的风险。兼容性调整需提前排查脚本和扩展,确保平滑升级。PostgreSQL 17 代表了社区对高性能、高可用、易用性和标准兼容的持续追求。

IT技术学习与工作笔记分享 957

【部署】OpenClaw版本降级实操(含全量卸载)

本文详细介绍了OpenClaw工具的降级与卸载方法。主要内容包括:1)通过npm安装指定版本的核心命令及国内镜像加速方案;2)两种卸载路径:CLI工具存在时的简易一键卸载(含交互式与非交互式命令)和手动分步卸载流程;3)CLI已删除但服务仍在运行时,针对macOS(launchd)、Linux(systemd)和Windows(计划任务)系统的具体清理步骤。文章特别强调了卸载前备份的重要性,并提供了不同安装方式(常规安装与源码克隆)的额外说明,确保用户能彻底清理所有组件。

海兰 3177

『PostgreSQL』PGSQL备份与还原实操指南

本文详细介绍了 PostgreSQL 的逻辑备份与物理备份方法,包括全库、指定库、指定表的备份还原命令及最佳实践,帮助数据库管理员保障数据安全。

老陈聊架构 3143

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

9.1 PostgreSQL数据备份策略与实践

数据备份是将数据从其原始位置复制到另一个位置的过程,以确保在发生数据丢失、损坏或灾难性事件时,数据可以被恢复。数据保护:防止数据丢失,确保数据的完整性和可用性。灾难恢复:在硬件故障、软件错误、自然灾害或其他不可预见事件导致数据丢失时,能够快速恢复数据。合规性要求:许多行业和地区都有法规要求企业必须定期备份数据,以满足合规性要求。版本控制:备份可以作为历史记录,帮助追踪数据的变化,便于进行审计和回溯。

Python老吕的博客 1973

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: PostgreSQL笔记16: 索引基础——概念、类型、创建与最佳实践
下一篇: PostgreSQL笔记18:物理备份体系详解——从底层API到工具生态
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值