[{"content":"单虚拟机测试pitr恢复 本文记录在单台虚拟机上部署PostgreSQL 16双实例（main主库、test恢复库），并完成PITR（Point-in-Time Recovery，时间点恢复）的完整实操流程。\n核心场景：单虚拟机内，通过两个PostgreSQL实例（main作为主库提供服务，test作为恢复库），实现主库备份、指定时间点恢复，最终将恢复库终止恢复、转为正常独立实例，模拟生产环境中数据恢复及实例切换的基础流程。（实际原因为我只有一台虚拟机）\n一、环境说明 系统版本：Ubuntu（适配PostgreSQL 16） PostgreSQL版本：16.13（Ubuntu 16.13-0ubuntu0.24.04.1） 实例规划: main实例（主库）：端口5432，用于数据存储、备份源 test实例（恢复库）：端口5433，用于接收主库备份、完成时间点恢复 核心目录： 归档目录：/var/lib/postgresql/16/archive（存储WAL归档日志） 备份目录：/backup（存储主库基础备份文件） 实例数据目录：/var/lib/postgresql/16/main（main实例）、/var/lib/postgresql/16/test（test实例） 二、前期准备（创建目录并授权） 创建归档目录和备份目录，确保postgres用户拥有完整权限，避免后续备份、归档失败。\n# 创建归档目录（用于存储WAL归档日志） postgres@lzy:~/16$ mkdir -p /var/lib/postgresql/16/archive # 创建备份目录（用于存储主库备份） postgres@lzy:~/16$ mkdir -p /backup # 授权postgres用户为目录所有者（PostgreSQL服务默认以postgres用户运行） postgres@lzy:~/16$ chown -R postgres:postgres /var/lib/postgresql/16/ # 授权postgres用户为备份目录所有者 postgres@lzy:~/16$ chown -R postgres:postgres /backup/ 三、部署main主实例（主库） 创建main实例、启动服务，并配置WAL归档（需重启实例生效）。\n# 创建main实例（PostgreSQL 16版本，实例名main） postgres@lzy:~/16$ pg_createcluster 16 main # 启动main实例 postgres@lzy:~/16$ pg_ctlcluster 16 main start # 开启归档模式（ALTER SYSTEM会将配置写入postgresql.auto.conf，永久生效） postgres@lzy:~/16$ psql -p 5432 -U postgres -c \u0026#34;ALTER SYSTEM SET archive_mode = on;\u0026#34; # 配置归档命令：先检查文件是否存在，避免重复归档，再将WAL文件复制到归档目录 postgres@lzy:~/16$ psql -p 5432 -U postgres -c \u0026#34;ALTER SYSTEM SET archive_command = \u0026#39;test ! -f /var/lib/postgresql/16/archive/%f \u0026amp;\u0026amp; cp %p /var/lib/postgresql/16/archive/%f\u0026#39;;\u0026#34; # 重启main实例，使归档参数生效（archive_mode为静态参数，仅reload无法生效） postgres@lzy:~/16$ pg_ctlcluster 16 main restart 四、main主库基础备份 切换WAL日志，确保归档起点干净，然后执行在线基础备份（pg_basebackup不影响主库正常运行）。\n# 切换WAL日志，生成新的WAL文件，确保归档目录有完整的日志起点 postgres@lzy:~/16$ psql -p 5432 -U postgres -c \u0026#34;select pg_switch_wal();\u0026#34; # 执行在线基础备份：端口5432（main实例），备份到/backup/full_backup，格式为tar压缩，同步获取WAL日志 postgres@lzy:~/16$ pg_basebackup -p 5432 -U postgres -D /backup/full_backup -F t -z -X fetch 五、main主库插入测试数据（用于验证恢复效果） 创建测试数据库、数据表，插入两组测试数据（数据A、数据B），并切换WAL日志确保数据归档，为后续时间点恢复做准备。\npostgres@lzy:~/16$ psql -p 5432 -U postgres \u0026lt;\u0026lt;EOF DROP DATABASE IF EXISTS prod_data; CREATE DATABASE prod_data; \\c prod_data; CREATE TABLE user_info(id int,name text,ctime timestamp); INSERT INTO user_info VALUES(1,\u0026#39;数据A\u0026#39;,now()); SELECT now(); EOF NOTICE: database \u0026#34;prod_data\u0026#34; does not exist, skipping DROP DATABASE CREATE DATABASE You are now connected to database \u0026#34;prod_data\u0026#34; as user \u0026#34;postgres\u0026#34;. CREATE TABLE INSERT 0 1 now ------------------------------- 2026-04-15 15:18:49.593855+00 (1 row) postgres@lzy:~/16$ psql -p 5432 -U postgres -c \u0026#34;select pg_switch_wal();\u0026#34; pg_switch_wal --------------- 0/4475300 (1 row) #插入数据B postgres@lzy:~/16$ psql -p 5432 -U postgres \u0026lt;\u0026lt;EOF \\c prod_data; INSERT INTO user_info VALUES(2,\u0026#39;数据B\u0026#39;,now()); EOF You are now connected to database \u0026#34;prod_data\u0026#34; as user \u0026#34;postgres\u0026#34;. INSERT 0 1 postgres@lzy:~/16$ psql -p 5432 -U postgres -c \u0026#34;select pg_switch_wal();\u0026#34; pg_switch_wal --------------- 0/50000F0 (1 row) #再次查看数据 postgres@lzy:~/16$ psql -p 5432 -U postgres -d prod_data -c \u0026#34;SELECT * FROM user_info;\u0026#34; id | name | ctime ----+-------+---------------------------- 1 | 数据A | 2026-04-15 15:18:49.590541 2 | 数据B | 2026-04-15 15:19:20.942403 (2 rows) 六、部署test恢复实例 创建test实例，停止实例并清空其数据目录，为后续恢复主库备份做准备。\n# 创建test实例（PostgreSQL 16版本，实例名test，默认端口5433） postgres@lzy:~/16$ pg_createcluster 16 test # 停止test实例（后续需清空数据目录，避免原有数据干扰恢复） postgres@lzy:~/16$ pg_ctlcluster 16 test stop # 清空test实例数据目录（确保恢复环境干净） postgres@lzy:~/16$ rm -rf /var/lib/postgresql/16/test/* # 解压main主库的基础备份，恢复到test实例数据目录 postgres@lzy:~/16$ tar -zxf /backup/full_backup/base.tar.gz -C /var/lib/postgresql/16/test/ 七、test实例执行PITR时间点恢复 配置test实例的恢复参数，指定恢复时间点（介于数据A和数据B插入时间之间），启动恢复并验证恢复效果。\n# 配置test实例的恢复参数（追加到postgresql.conf末尾） # restore_command恢复命令：从归档目录复制WAL日志到test实例的pg_wal目录 # recovery_target_time恢复目标时间：介于数据A插入时间15:18:49和数据B插入时间15:19:20之间 # 恢复完成后暂停，便于验证恢复结果 postgres@lzy:~/16$ cat \u0026gt;\u0026gt; /etc/postgresql/16/test/postgresql.conf \u0026lt;\u0026lt;EOF restore_command = \u0026#39;cp /var/lib/postgresql/16/archive/%f %p 2\u0026gt;/dev/null || true\u0026#39; recovery_target_time = \u0026#39;2026-04-15 15:19:00\u0026#39; recovery_target_action = pause EOF # 创建恢复信号文件（PostgreSQL检测到该文件，会进入恢复模式） postgres@lzy:~/16$ touch /var/lib/postgresql/16/test/recovery.signal # 授权postgres用户为test实例目录所有者，避免权限不足 postgres@lzy:~/16$ chown -R postgres:postgres /var/lib/postgresql/16/test/ # 启动test实例，开始执行时间点恢复 postgres@lzy:~/16$ pg_ctlcluster 16 test start # 验证恢复结果：查看test实例的prod_data数据库，确认恢复情况 postgres@lzy:~/16$ psql -p 5433 -U postgres -d prod_data -c \u0026#34;SELECT * FROM user_info;\u0026#34; id | name | ctime ----+-------+---------------------------- 1 | 数据A | 2026-04-15 15:18:49.590541 (1 row) #查看test数据库在恢复状态 postgres@lzy:~/16$ pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 16 main 5432 online postgres /var/lib/postgresql/16/main /var/log/postgresql/postgresql-16-main.log 16 test 5433 online,recovery postgres /var/lib/postgresql/16/test /var/log/postgresql/postgresql-16-test.log # 暂停WAL重放（恢复模式下，先暂停再执行提升） postgres@lzy:~/16$ psql -p 5433 -U postgres -c \u0026#34;select pg_wal_replay_pause();\u0026#34; # 提升test实例为主库，终止恢复模式（转为正常实例） postgres@lzy:~/16$ psql -p 5433 -U postgres -c \u0026#34;select pg_promote();\u0026#34; 八、注意事项 归档参数（archive_mode）为PostgreSQL静态参数，仅执行pg_reload_conf()无法生效，必须重启实例才能开启归档，若未重启，归档目录会为空，导致恢复失败。\n九、总结 本文完成了单虚拟机上PostgreSQL 16双实例的部署、主库备份、PITR时间点恢复及恢复实例升主的完整实操，测试环境验证PITR恢复能力。核心关键点在于WAL归档的正确配置（需重启实例）、恢复时间点的准确设定。\n","permalink":"https://wdhlzy.xyz/posts/postgresql16-pitr-guide/","summary":"\u003ch1 id=\"单虚拟机测试pitr恢复\"\u003e单虚拟机测试pitr恢复\u003c/h1\u003e\n\u003cp\u003e本文记录在单台虚拟机上部署PostgreSQL 16双实例（main主库、test恢复库），并完成PITR（Point-in-Time Recovery，时间点恢复）的完整实操流程。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e核心场景\u003c/strong\u003e：单虚拟机内，通过两个PostgreSQL实例（main作为主库提供服务，test作为恢复库），实现主库备份、指定时间点恢复，最终将恢复库终止恢复、转为正常独立实例，模拟生产环境中数据恢复及实例切换的基础流程。（实际原因为我只有一台虚拟机）\u003c/p\u003e\n\u003ch2 id=\"一环境说明\"\u003e一、环境说明\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e系统版本：Ubuntu（适配PostgreSQL 16）\u003c/li\u003e\n\u003cli\u003ePostgreSQL版本：16.13（Ubuntu 16.13-0ubuntu0.24.04.1）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e实例规划\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003emain实例（主库）：端口5432，用于数据存储、备份源\u003c/li\u003e\n\u003cli\u003etest实例（恢复库）：端口5433，用于接收主库备份、完成时间点恢复\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e核心目录\u003c/strong\u003e：\n\u003cul\u003e\n\u003cli\u003e归档目录：/var/lib/postgresql/16/archive（存储WAL归档日志）\u003c/li\u003e\n\u003cli\u003e备份目录：/backup（存储主库基础备份文件）\u003c/li\u003e\n\u003cli\u003e实例数据目录：/var/lib/postgresql/16/main（main实例）、/var/lib/postgresql/16/test（test实例）\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"二前期准备创建目录并授权\"\u003e二、前期准备（创建目录并授权）\u003c/h2\u003e\n\u003cp\u003e创建归档目录和备份目录，确保postgres用户拥有完整权限，避免后续备份、归档失败。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 创建归档目录（用于存储WAL归档日志）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ mkdir -p /var/lib/postgresql/16/archive\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 创建备份目录（用于存储主库备份）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ mkdir -p /backup\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 授权postgres用户为目录所有者（PostgreSQL服务默认以postgres用户运行）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ chown -R postgres:postgres /var/lib/postgresql/16/ \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 授权postgres用户为备份目录所有者\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ chown -R postgres:postgres /backup/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"三部署main主实例主库\"\u003e三、部署main主实例（主库）\u003c/h2\u003e\n\u003cp\u003e创建main实例、启动服务，并配置WAL归档（需重启实例生效）。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 创建main实例（PostgreSQL 16版本，实例名main）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ pg_createcluster \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e main\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 启动main实例\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ pg_ctlcluster \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e main start\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 开启归档模式（ALTER SYSTEM会将配置写入postgresql.auto.conf，永久生效）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ psql -p \u003cspan style=\"color:#ae81ff\"\u003e5432\u003c/span\u003e -U postgres -c \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;ALTER SYSTEM SET archive_mode = on;\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 配置归档命令：先检查文件是否存在，避免重复归档，再将WAL文件复制到归档目录\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ psql -p \u003cspan style=\"color:#ae81ff\"\u003e5432\u003c/span\u003e -U postgres -c \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;ALTER SYSTEM SET archive_command = \u0026#39;test ! -f /var/lib/postgresql/16/archive/%f \u0026amp;\u0026amp; cp %p /var/lib/postgresql/16/archive/%f\u0026#39;;\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 重启main实例，使归档参数生效（archive_mode为静态参数，仅reload无法生效）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~/16$ pg_ctlcluster \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e main restart\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"四main主库基础备份\"\u003e四、main主库基础备份\u003c/h2\u003e\n\u003cp\u003e切换WAL日志，确保归档起点干净，然后执行在线基础备份（pg_basebackup不影响主库正常运行）。\u003c/p\u003e","title":"PostgreSQL 16 双实例 PITR 时间点恢复"},{"content":"pgbench是PostgreSQL官方自带的免费性能压测工具，无需额外安装，是数据库运维和开发者测试PostgreSQL吞吐量的首选工具。本文通过在2核i5-4260U服务器上的真实压测数据，详解TPS指标含义、pgbench核心参数、不同并发下的性能表现，帮你精准找到数据库的最佳并发数和最大TPS峰值，同时解决压测过程中常见的\u0026quot;too many clients already\u0026quot;报错问题。\n一、TPS 概念解释 tps：transactions per second（每秒事务数）的缩写 在pgbench的测试结果中，tps表示数据库每秒钟能够完成多少个事务\n对于只读测试，一个“事务”就是一条select查询语句 对于默认的tpc-B测试（读写混合），一个事务是一个完整的业务单元：begin\u0026ndash;\u0026gt;更新账户\u0026ndash;\u0026gt;查询余额\u0026ndash;\u0026gt;更新出纳员\u0026ndash;\u0026gt;更新分行\u0026ndash;\u0026gt;插入历史\u0026ndash;\u0026gt;commit tps是衡量数据库吞吐量（处理能力）最核心的指标，tps越高，代表数据库在单位时间内能处理的请求越多，性能越好。 二、pgbench 测试参数解释 常用测试命令示例 pgbench -S -c 16 -j 4 -T 60 -M prepared -r pgbench_test pgbench -c 16 -j 4 -T 60 -M prepared -r pgbench_test 只读模式（-S），并发16，线程4，持续60s postgres@lzy:~$ pgbench -S -c 16 -j 4 -T 60 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: select only\u0026gt; scaling factor: 100 query mode: prepared number of clients: 16 number of threads: 4 maximum number of tries: 1 duration: 60 s number of transactions actually processed: 2262366 number of failed transactions: 0 (0.000%) latency average = 0.424 ms initial connection time = 21.638 ms tps = 37719.421242 (without initial connection time) statement latencies in milliseconds and failures: 0.001 0 \\set aid random(1, 100000 * :scale) 0.420 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 读写混合模式，并发16，线程4，持续60s postgres@lzy:~$ pgbench -c 16 -j 4 -T 60 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: TPC-B (sort of)\u0026gt; scaling factor: 100 query mode: prepared number of clients: 16 number of threads: 4 maximum number of tries: 1 duration: 60 s number of transactions actually processed: 94767 number of failed transactions: 0 (0.000%) latency average = 10.258 ms initial connection time = 20.287 ms tps = 1559.782572 (without initial connection time) statement latencies in milliseconds and failures: 0.002 0 \\set aid random(1, 100000 * :scale) 0.001 0 \\set bid random(1, 1 * :scale) 0.001 0 \\set tid random(1, 10 * :scale) 0.001 0 \\set delta random(-5000, 5000) 0.320 0 BEGIN; 0.533 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.465 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 0.377 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 0.908 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.232 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 7.273 0 END; 参数说明 -S：只读模式，加上-S时，只执行select查询，不执行更新/插入。不加时执行默认的tpc-B读写混合事务 -c：客户端并发数 -j：工作线程数，使用指定数量的cpu线程来驱动这些客户端。通常设为cpu核心数 -T：测试持续时间，压测持续时间，如果不指定-T或-t，默认只运行10s -r：在测试结束后，额外输出每条 SQL 语句的平均耗时 -M：查询模式，使用预处理语句，可以减少sql解析和计划开销，使测试更聚焦于数据库执行性能 三、服务器 CPU 信息与 pgbench -j 参数最佳实践 postgres@lzy:~$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 4 逻辑cpu总数 On-line CPU(s) list: 0-3 Vendor ID: GenuineIntel Model name: Intel(R) Core(TM) i5-4260U CPU @ 1.40GHz CPU family: 6 Model: 69 Thread(s) per core: 2 物理核心数 Core(s) per socket: 2 每个核心2个超线程 Socket(s): 1 Stepping: 1 CPU(s) scaling MHz: 52% 结论：根据电脑cpu情况，-j 线程数建议为物理核心数2，让每个核心处理一个工作线程。\n四、pgbench 测试结果 测试1：读写混合模式，不同并发（4/8/16/32/64），线程2，持续30s 4.1 并发4，线程2 postgres@lzy:~$ pgbench -c 4 -j 2 -T 30 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: TPC-B (sort of)\u0026gt; scaling factor: 100 query mode: prepared number of clients: 4 number of threads: 2 maximum number of tries: 1 duration: 30 s number of transactions actually processed: 33938 number of failed transactions: 0 (0.000%) latency average = 3.535 ms initial connection time = 8.900 ms tps = 1131.527031 (without initial connection time) statement latencies in milliseconds and failures: 0.002 0 \\set aid random(1, 100000 * :scale) 0.001 0 \\set bid random(1, 1 * :scale) 0.001 0 \\set tid random(1, 10 * :scale) 0.001 0 \\set delta random(-5000, 5000) 0.091 0 BEGIN; 0.246 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.116 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 0.135 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 0.206 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.103 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 2.634 0 END; 4.2 并发8，线程2 postgres@lzy:~$ pgbench -c 8 -j 2 -T 30 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: TPC-B (sort of)\u0026gt; scaling factor: 100 query mode: prepared number of clients: 8 number of threads: 2 maximum number of tries: 1 duration: 30 s number of transactions actually processed: 36874 number of failed transactions: 0 (0.000%) latency average = 6.702 ms initial connection time = 13.167 ms tps = 1193.745774 (without initial connection time) statement latencies in milliseconds and failures: 0.002 0 \\set aid random(1, 100000 * :scale) 0.001 0 \\set bid random(1, 1 * :scale) 0.001 0 \\set tid random(1, 10 * :scale) 0.001 0 \\set delta random(-5000, 5000) 0.162 0 BEGIN; 0.342 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.236 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 0.232 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 0.388 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.155 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 5.060 0 END; 4.3 并发16，线程2 postgres@lzy:~$ pgbench -c 16 -j 2 -T 30 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: TPC-B (sort of)\u0026gt; scaling factor: 100 query mode: prepared number of clients: 16 number of threads: 2 maximum number of tries: 1 duration: 30 s number of transactions actually processed: 71725 number of failed transactions: 0 (0.000%) latency average = 6.845 ms initial connection time = 26.046 ms tps = 2337.479811 (without initial connection time) statement latencies in milliseconds and failures: 0.002 0 \\set aid random(1, 100000 * :scale) 0.001 0 \\set bid random(1, 1 * :scale) 0.001 0 \\set tid random(1, 10 * :scale) 0.001 0 \\set delta random(-5000, 5000) 0.296 0 BEGIN; 0.500 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.444 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 0.301 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 0.636 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.237 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 4.284 0 END; 4.4 并发32，线程2 postgres@lzy:~$ pgbench -c 32 -j 2 -T 30 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: TPC-B (sort of)\u0026gt; scaling factor: 100 query mode: prepared number of clients: 32 number of threads: 2 maximum number of tries: 1 duration: 30 s number of transactions actually processed: 75520 number of failed transactions: 0 (0.000%) latency average = 13.173 ms initial connection time = 51.288 ms tps = 2429.190715 (without initial connection time) statement latencies in milliseconds and failures: 0.002 0 \\set aid random(1, 100000 * :scale) 0.001 0 \\set bid random(1, 1 * :scale) 0.001 0 \\set tid random(1, 10 * :scale) 0.001 0 \\set delta random(-5000, 5000) 0.455 0 BEGIN; 0.694 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.825 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 0.624 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 1.855 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.495 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 7.975 0 END; 4.5 并发64，线程2 postgres@lzy:~$ pgbench -c 64 -j 2 -T 30 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. transaction type: \u0026lt;builtin: TPC-B (sort of)\u0026gt; scaling factor: 100 query mode: prepared number of clients: 64 number of threads: 2 maximum number of tries: 1 duration: 30 s number of transactions actually processed: 74684 number of failed transactions: 0 (0.000%) latency average = 26.209 ms initial connection time = 104.197 ms tps = 2441.905430 (without initial connection time) statement latencies in milliseconds and failures: 0.002 0 \\set aid random(1, 100000 * :scale) 0.001 0 \\set bid random(1, 1 * :scale) 0.001 0 \\set tid random(1, 10 * :scale) 0.001 0 \\set delta random(-5000, 5000) 0.846 0 BEGIN; 1.493 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 1.856 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 1.884 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 6.508 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 1.821 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 11.481 0 END; 五、测试结论 并发: 4 8 16 32 64 TPS: 1131 1194 2337 2429 2442 4 → 8 并发：TPS 几乎不变（1131 → 1194），延迟从 3.5ms 涨到 6.7ms。说明并发翻倍但没有带来吞吐量提升，资源开始出现竞争。 8 → 16 并发：TPS 翻倍（1194 → 2337），这是合理的提升。延迟基本持平（6.7ms → 6.8ms）。说明在 16 并发以内，系统还能有效利用并发。 16 → 32 并发：TPS 几乎不再增长（2337 → 2429），仅增加 4%，而延迟翻倍（6.8ms → 13.2ms）。 32 → 64 并发：TPS 完全停滞（2429 → 2442），延迟再次翻倍（13.2ms → 26.2ms）。 核心结论 性能拐点在 16 并发。超过 16 后，增加并发只会让延迟飙升，吞吐量基本不变。最大 TPS 约 2440（在当前硬件和配置下）。 当前服务器（2 核 i5-4260U，默认 PostgreSQL 配置）在 pgbench 读写混合测试中，最大 TPS 约 2440，最佳并发 16。性能瓶颈主要是磁盘写入延迟（WAL fsync）和单行表锁竞争，CPU 和内存不是首要限制。\n六、常见报错：too many clients already 解决方案 报错信息 postgres@lzy:~$ postgres@lzy:~$ pgbench -c 128 -j 2 -T 30 -M prepared -r pgbench_test pgbench (16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)) starting vacuum...end. pgbench: error: connection to server on socket \u0026#34;/var/run/postgresql/.s.PGSQL.5432\u0026#34; failed: FATAL: sorry, too many clients already pgbench: error: could not create connection for client 113 排查结果 postgres=# show max_connections; max_connections 100 (1 row) 相关阅读 Ubuntu 24.04 部署与卸载 PostgreSQL 16.13 教程（新手必看） https://wdhlzy.xyz/posts/postgresql-ubuntu-install/\nPostgreSQL 核心知识点与实操演练（含电商订单统计案例） https://wdhlzy.xyz/posts/postgres/\n","permalink":"https://wdhlzy.xyz/posts/pgbench-postgresql-tps-test-report/","summary":"\u003cp\u003epgbench是PostgreSQL官方自带的免费性能压测工具，无需额外安装，是数据库运维和开发者测试PostgreSQL吞吐量的首选工具。本文通过在2核i5-4260U服务器上的真实压测数据，详解TPS指标含义、pgbench核心参数、不同并发下的性能表现，帮你精准找到数据库的最佳并发数和最大TPS峰值，同时解决压测过程中常见的\u0026quot;too many clients already\u0026quot;报错问题。\u003c/p\u003e\n\u003ch2 id=\"一tps-概念解释\"\u003e一、TPS 概念解释\u003c/h2\u003e\n\u003cp\u003etps：transactions per second（每秒事务数）的缩写\n在pgbench的测试结果中，tps表示数据库每秒钟能够完成多少个事务\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e对于只读测试，一个“事务”就是一条select查询语句\u003c/li\u003e\n\u003cli\u003e对于默认的tpc-B测试（读写混合），一个事务是一个完整的业务单元：begin\u0026ndash;\u0026gt;更新账户\u0026ndash;\u0026gt;查询余额\u0026ndash;\u0026gt;更新出纳员\u0026ndash;\u0026gt;更新分行\u0026ndash;\u0026gt;插入历史\u0026ndash;\u0026gt;commit\ntps是衡量数据库吞吐量（处理能力）最核心的指标，tps越高，代表数据库在单位时间内能处理的请求越多，性能越好。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"二pgbench-测试参数解释\"\u003e二、pgbench 测试参数解释\u003c/h2\u003e\n\u003ch3 id=\"常用测试命令示例\"\u003e常用测试命令示例\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epgbench -S -c \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e -j \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e -T \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e -M prepared -r pgbench_test\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epgbench -c \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e -j \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e -T \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e -M prepared -r pgbench_test\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"只读模式-s并发16线程4持续60s\"\u003e只读模式（-S），并发16，线程4，持续60s\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~$ pgbench -S -c \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e -j \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e -T \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e -M prepared -r pgbench_test\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epgbench \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e16.13 \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eUbuntu 16.13-0ubuntu0.24.04.1\u003cspan style=\"color:#f92672\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003estarting vacuum...end.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etransaction type: \u0026lt;builtin: \u003cspan style=\"color:#66d9ef\"\u003eselect\u003c/span\u003e only\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003escaling factor: \u003cspan style=\"color:#ae81ff\"\u003e100\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003equery mode: prepared\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of clients: \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of threads: \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emaximum number of tries: \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eduration: \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e s\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of transactions actually processed: \u003cspan style=\"color:#ae81ff\"\u003e2262366\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of failed transactions: \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0.000%\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elatency average \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 0.424 ms\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003einitial connection time \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 21.638 ms\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etps \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 37719.421242 \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003ewithout initial connection time\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003estatement latencies in milliseconds and failures:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.001           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  \u003cspan style=\"color:#ae81ff\"\u003e\\s\u003c/span\u003eet aid random\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e1, \u003cspan style=\"color:#ae81ff\"\u003e100000\u003c/span\u003e * :scale\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.420           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  SELECT abalance FROM pgbench_accounts WHERE aid \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e :aid;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"读写混合模式并发16线程4持续60s\"\u003e读写混合模式，并发16，线程4，持续60s\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~$ pgbench -c \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e -j \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e -T \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e -M prepared -r pgbench_test\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epgbench \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e16.13 \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eUbuntu 16.13-0ubuntu0.24.04.1\u003cspan style=\"color:#f92672\"\u003e))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003estarting vacuum...end.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etransaction type: \u0026lt;builtin: TPC-B \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003esort of\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003escaling factor: \u003cspan style=\"color:#ae81ff\"\u003e100\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003equery mode: prepared\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of clients: \u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of threads: \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emaximum number of tries: \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eduration: \u003cspan style=\"color:#ae81ff\"\u003e60\u003c/span\u003e s\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of transactions actually processed: \u003cspan style=\"color:#ae81ff\"\u003e94767\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enumber of failed transactions: \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e0.000%\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elatency average \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 10.258 ms\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003einitial connection time \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 20.287 ms\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etps \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 1559.782572 \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003ewithout initial connection time\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003estatement latencies in milliseconds and failures:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.002           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  \u003cspan style=\"color:#ae81ff\"\u003e\\s\u003c/span\u003eet aid random\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e1, \u003cspan style=\"color:#ae81ff\"\u003e100000\u003c/span\u003e * :scale\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.001           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  \u003cspan style=\"color:#ae81ff\"\u003e\\s\u003c/span\u003eet bid random\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e1, \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e * :scale\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.001           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  \u003cspan style=\"color:#ae81ff\"\u003e\\s\u003c/span\u003eet tid random\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e1, \u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e * :scale\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.001           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  \u003cspan style=\"color:#ae81ff\"\u003e\\s\u003c/span\u003eet delta random\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e-5000, 5000\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.320           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  BEGIN;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.533           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  UPDATE pgbench_accounts SET abalance \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e abalance + :delta WHERE aid \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e :aid;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.465           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  SELECT abalance FROM pgbench_accounts WHERE aid \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e :aid;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.377           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  UPDATE pgbench_tellers SET tbalance \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e tbalance + :delta WHERE tid \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e :tid;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.908           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  UPDATE pgbench_branches SET bbalance \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e bbalance + :delta WHERE bid \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e :bid;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         0.232           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  INSERT INTO pgbench_history \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003etid, bid, aid, delta, mtime\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e VALUES \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e         7.273           \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e  END;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"参数说明\"\u003e参数说明\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e-S\u003c/strong\u003e：只读模式，加上-S时，只执行select查询，不执行更新/插入。不加时执行默认的tpc-B读写混合事务\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e-c\u003c/strong\u003e：客户端并发数\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e-j\u003c/strong\u003e：工作线程数，使用指定数量的cpu线程来驱动这些客户端。通常设为cpu核心数\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e-T\u003c/strong\u003e：测试持续时间，压测持续时间，如果不指定-T或-t，默认只运行10s\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e-r\u003c/strong\u003e：在测试结束后，额外输出每条 SQL 语句的平均耗时\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e-M\u003c/strong\u003e：查询模式，使用预处理语句，可以减少sql解析和计划开销，使测试更聚焦于数据库执行性能\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"三服务器-cpu-信息与-pgbench--j-参数最佳实践\"\u003e三、服务器 CPU 信息与 pgbench -j 参数最佳实践\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostgres@lzy:~$ lscpu\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eArchitecture:                x86_64\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  CPU op-mode\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e:            32-bit, 64-bit\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  Address sizes:             \u003cspan style=\"color:#ae81ff\"\u003e39\u003c/span\u003e bits physical, \u003cspan style=\"color:#ae81ff\"\u003e48\u003c/span\u003e bits virtual\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  Byte Order:                Little Endian\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eCPU\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e:                      \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e     逻辑cpu总数\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  On-line CPU\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e list:       0-3\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eVendor ID:                   GenuineIntel\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  Model name:                Intel\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eR\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e Core\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eTM\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e i5-4260U CPU @ 1.40GHz\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    CPU family:              \u003cspan style=\"color:#ae81ff\"\u003e6\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Model:                   \u003cspan style=\"color:#ae81ff\"\u003e69\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Thread\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e per core:      \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e     物理核心数\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Core\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e per socket:      \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e    每个核心2个超线程\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Socket\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e:               \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Stepping:                \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    CPU\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003es\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e scaling MHz:      52%\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e结论：根据电脑cpu情况，-j 线程数建议为物理核心数2，让每个核心处理一个工作线程。\u003c/p\u003e","title":"PostgreSQL性能测试实战：pgbench压测教程（TPS优化+最大并发测试）"},{"content":"红帽 RHEL 全版本系统镜像 免费下载 本文分享RHEL（Red Hat Enterprise Linux）4、5、6、7、8、9、10全系列官方原版ISO镜像文件，所有镜像均为红帽官方原版，安全纯净无修改，支持服务器装机、VMware/VirtualBox虚拟机学习、企业运维环境搭建等场景，通过百度网盘高速下载。\n镜像资源说明 本次分享的RHEL镜像为红帽官方原版ISO，覆盖从RHEL4到最新RHEL10的全历史版本，包含完整安装镜像、最小化安装镜像等常用版本，满足个人学习、企业测试、生产环境部署等不同需求。\nRHEL镜像下载信息 📦 资源名称：RHEL 4/5/6/7/8/9/10 全版本ISO镜像合集（含rufus、UltraISO制作工具） 🌐 下载链接： https://pan.baidu.com/s/1PT1gCLukOeXioz2u2y8CNA?pwd=qztq\n包含RHEL版本列表 RHEL 4 全系列官方镜像 RHEL 5 全系列官方镜像 RHEL 6 全系列官方镜像 RHEL 7 全系列官方镜像 RHEL 8 全系列官方镜像 RHEL 9 全系列官方镜像 RHEL 10 全系列官方镜像 附赠rufus、UltraISO系统安装制作工具 所有镜像均保留官方校验值，可自行核对MD5/SHA1，确保文件完整无损坏。\n镜像适用场景 个人虚拟机学习Linux系统操作、红帽认证备考 企业服务器重装、初始化部署 老旧设备兼容安装稳定版红帽系统 开发测试环境快速搭建 系统运维、故障排查实验 使用注意事项 网盘链接长期有效，失效可留言补发 镜像文件较大，建议使用百度网盘客户端下载 安装前建议校验文件完整性，避免安装失败 仅用于学习与合法运维使用，请勿用于非法用途 附赠的rufus、UltraISO可用于制作U盘启动盘，快速安装系统 ","permalink":"https://wdhlzy.xyz/posts/redhat/","summary":"\u003ch1 id=\"红帽-rhel-全版本系统镜像-免费下载\"\u003e红帽 RHEL 全版本系统镜像 免费下载\u003c/h1\u003e\n\u003cp\u003e本文分享\u003cstrong\u003eRHEL（Red Hat Enterprise Linux）4、5、6、7、8、9、10\u003c/strong\u003e全系列官方原版ISO镜像文件，所有镜像均为红帽官方原版，安全纯净无修改，支持服务器装机、VMware/VirtualBox虚拟机学习、企业运维环境搭建等场景，通过百度网盘高速下载。\u003c/p\u003e\n\u003ch2 id=\"镜像资源说明\"\u003e镜像资源说明\u003c/h2\u003e\n\u003cp\u003e本次分享的RHEL镜像为\u003cstrong\u003e红帽官方原版ISO\u003c/strong\u003e，覆盖从RHEL4到最新RHEL10的全历史版本，包含完整安装镜像、最小化安装镜像等常用版本，满足个人学习、企业测试、生产环境部署等不同需求。\u003c/p\u003e\n\u003ch2 id=\"rhel镜像下载信息\"\u003eRHEL镜像下载信息\u003c/h2\u003e\n\u003cp\u003e📦 资源名称：RHEL 4/5/6/7/8/9/10 全版本ISO镜像合集（含rufus、UltraISO制作工具）\n🌐 下载链接：\n\u003ca href=\"https://pan.baidu.com/s/1PT1gCLukOeXioz2u2y8CNA?pwd=qztq\"\u003ehttps://pan.baidu.com/s/1PT1gCLukOeXioz2u2y8CNA?pwd=qztq\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"包含rhel版本列表\"\u003e包含RHEL版本列表\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRHEL 4 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eRHEL 5 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eRHEL 6 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eRHEL 7 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eRHEL 8 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eRHEL 9 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eRHEL 10 全系列官方镜像\u003c/li\u003e\n\u003cli\u003e附赠rufus、UltraISO系统安装制作工具\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e所有镜像均保留官方校验值，可自行核对MD5/SHA1，确保文件完整无损坏。\u003c/p\u003e\n\u003ch2 id=\"镜像适用场景\"\u003e镜像适用场景\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e个人虚拟机学习Linux系统操作、红帽认证备考\u003c/li\u003e\n\u003cli\u003e企业服务器重装、初始化部署\u003c/li\u003e\n\u003cli\u003e老旧设备兼容安装稳定版红帽系统\u003c/li\u003e\n\u003cli\u003e开发测试环境快速搭建\u003c/li\u003e\n\u003cli\u003e系统运维、故障排查实验\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"使用注意事项\"\u003e使用注意事项\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e网盘链接长期有效，失效可留言补发\u003c/li\u003e\n\u003cli\u003e镜像文件较大，建议使用百度网盘客户端下载\u003c/li\u003e\n\u003cli\u003e安装前建议校验文件完整性，避免安装失败\u003c/li\u003e\n\u003cli\u003e仅用于学习与合法运维使用，请勿用于非法用途\u003c/li\u003e\n\u003cli\u003e附赠的rufus、UltraISO可用于制作U盘启动盘，快速安装系统\u003c/li\u003e\n\u003c/ol\u003e","title":"RHEL 4/5/6/7/8/9/10全版本系统镜像下载｜红帽官方原版ISO百度网盘分享"},{"content":"CentOS 5/6/7/8全版本系统镜像 百度网盘下载 本文分享CentOS 5、CentOS 6、CentOS 7、CentOS 8全系列官方原版ISO镜像文件，所有镜像均未修改、安全纯净，支持服务器装机、VMware/VirtualBox虚拟机学习、老旧设备重装系统等场景。\n镜像资源说明 本次分享的CentOS镜像为官方原版ISO，包含 Minimal（最小化安装）、DVD（完整版）、Everything（全量包）等常用版本，覆盖32位/64位系统，满足学习、测试、生产环境部署需求。\n下载链接 https://pan.baidu.com/s/1wrsC9m4mlerRU0z1uQx1iw?pwd=g712\n包含CentOS版本列表 CentOS 5 全系列官方镜像 CentOS 6 全系列官方镜像 CentOS 7 全系列官方镜像 CentOS 8 全系列官方镜像 所有镜像均保留官方校验值，可自行核对MD5/SHA1，确保文件完整无损坏。\n镜像适用场景 个人虚拟机学习Linux系统操作 服务器重装、初始化部署 老旧设备兼容安装稳定版系统 开发测试环境快速搭建 使用注意事项 网盘链接长期有效，失效可留言补发 镜像文件较大，建议使用百度网盘客户端下载 安装前建议校验文件完整性，避免安装失败 仅用于学习和合法运维使用，请勿用于非法用途 ","permalink":"https://wdhlzy.xyz/posts/centos/","summary":"\u003ch1 id=\"centos-5678全版本系统镜像-百度网盘下载\"\u003eCentOS 5/6/7/8全版本系统镜像 百度网盘下载\u003c/h1\u003e\n\u003cp\u003e本文分享\u003cstrong\u003eCentOS 5、CentOS 6、CentOS 7、CentOS 8\u003c/strong\u003e全系列官方原版ISO镜像文件，所有镜像均未修改、安全纯净，支持服务器装机、VMware/VirtualBox虚拟机学习、老旧设备重装系统等场景。\u003c/p\u003e\n\u003ch2 id=\"镜像资源说明\"\u003e镜像资源说明\u003c/h2\u003e\n\u003cp\u003e本次分享的CentOS镜像为\u003cstrong\u003e官方原版ISO\u003c/strong\u003e，包含 Minimal（最小化安装）、DVD（完整版）、Everything（全量包）等常用版本，覆盖32位/64位系统，满足学习、测试、生产环境部署需求。\u003c/p\u003e\n\u003ch2 id=\"下载链接\"\u003e下载链接\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pan.baidu.com/s/1wrsC9m4mlerRU0z1uQx1iw?pwd=g712\"\u003ehttps://pan.baidu.com/s/1wrsC9m4mlerRU0z1uQx1iw?pwd=g712\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"包含centos版本列表\"\u003e包含CentOS版本列表\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCentOS 5 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eCentOS 6 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eCentOS 7 全系列官方镜像\u003c/li\u003e\n\u003cli\u003eCentOS 8 全系列官方镜像\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e所有镜像均保留官方校验值，可自行核对MD5/SHA1，确保文件完整无损坏。\u003c/p\u003e\n\u003ch2 id=\"镜像适用场景\"\u003e镜像适用场景\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e个人虚拟机学习Linux系统操作\u003c/li\u003e\n\u003cli\u003e服务器重装、初始化部署\u003c/li\u003e\n\u003cli\u003e老旧设备兼容安装稳定版系统\u003c/li\u003e\n\u003cli\u003e开发测试环境快速搭建\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"使用注意事项\"\u003e使用注意事项\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e网盘链接长期有效，失效可留言补发\u003c/li\u003e\n\u003cli\u003e镜像文件较大，建议使用百度网盘客户端下载\u003c/li\u003e\n\u003cli\u003e安装前建议校验文件完整性，避免安装失败\u003c/li\u003e\n\u003cli\u003e仅用于学习和合法运维使用，请勿用于非法用途\u003c/li\u003e\n\u003c/ol\u003e","title":"CentOS 5/6/7/8全版本系统镜像下载｜百度网盘分享（官方原版ISO）"},{"content":"银河麒麟服务器/桌面版全版本系统镜像 百度网盘下载 本文分享银河麒麟（Kylin）服务器版、桌面版全系列官方原版ISO镜像文件，覆盖从V10到最新版本、多架构多硬件平台，所有镜像均为官方原版，安全纯净无修改，适合国产服务器部署、国产PC装机、信创环境搭建、虚拟机学习等场景。\n镜像资源说明 本次分享的银河麒麟镜像为官方原版ISO，完整覆盖**服务器版（server）和桌面版（desktop）**两大系列，适配飞腾、龙芯、兆心、海光、Intel/AMD等全主流国产/通用架构，包含V10正式版、V11版、国防版、教育版等全类型镜像，满足信创项目、企业运维、个人学习等全场景需求。\n下载链接 https://pan.baidu.com/s/1pg3o8rgVGBVROKv1L5b70w?pwd=1hhp\n包含银河麒麟版本列表 一、服务器版（server）全系列 兆心-海光版（202303/202503） 龙芯3B5000版（202403/202507 V11版/202303） 飞腾-鲲鹏版（202404/202503 V11版/202303） Intel-Amd-海光-兆芯版（202507 V11版） Host版 V10 202304（云底座） 历史版本：2022-x86版本(old)、2021(old) 附赠rufus-U盘刻录工具 二、桌面版（desktop）全系列 兆心-海光版（202503/202403） 银河麒麟桌面操作系统（GFB 国-防版）V10（飞腾版） 申威版（202503） 麒麟9006C版/9000C版（202403） 麒麟990版-华为擎云w515 龙芯3A5000/3A6000版（202403/202503） 龙芯3A4000版（202403） 教育版 海思麒麟-盘古m900 所有镜像均保留官方校验值，可自行核对MD5/SHA1，确保文件完整无损坏。\n镜像适用场景 国产信创服务器部署、政务/企业国产化改造 国产PC、笔记本（飞腾/龙芯/海光平台）系统安装 信创环境开发测试、国产化软件适配 个人学习国产Linux系统、银河麒麟认证备考 老旧国产设备系统重装、运维维护 使用注意事项 网盘链接长期有效，失效可留言补发 镜像文件较大，建议使用百度网盘客户端下载 安装前建议校验文件完整性，避免安装失败 仅用于学习与合法运维、信创项目使用，请勿用于非法用途 附赠的rufus工具可用于制作U盘启动盘，快速安装系统 ","permalink":"https://wdhlzy.xyz/posts/kylin/","summary":"\u003ch1 id=\"银河麒麟服务器桌面版全版本系统镜像-百度网盘下载\"\u003e银河麒麟服务器/桌面版全版本系统镜像 百度网盘下载\u003c/h1\u003e\n\u003cp\u003e本文分享\u003cstrong\u003e银河麒麟（Kylin）服务器版、桌面版全系列官方原版ISO镜像文件\u003c/strong\u003e，覆盖从V10到最新版本、多架构多硬件平台，所有镜像均为官方原版，安全纯净无修改，适合国产服务器部署、国产PC装机、信创环境搭建、虚拟机学习等场景。\u003c/p\u003e\n\u003ch2 id=\"镜像资源说明\"\u003e镜像资源说明\u003c/h2\u003e\n\u003cp\u003e本次分享的银河麒麟镜像为\u003cstrong\u003e官方原版ISO\u003c/strong\u003e，完整覆盖**服务器版（server）\u003cstrong\u003e和\u003c/strong\u003e桌面版（desktop）**两大系列，适配飞腾、龙芯、兆心、海光、Intel/AMD等全主流国产/通用架构，包含V10正式版、V11版、国防版、教育版等全类型镜像，满足信创项目、企业运维、个人学习等全场景需求。\u003c/p\u003e\n\u003ch2 id=\"下载链接\"\u003e下载链接\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pan.baidu.com/s/1pg3o8rgVGBVROKv1L5b70w?pwd=1hhp\"\u003ehttps://pan.baidu.com/s/1pg3o8rgVGBVROKv1L5b70w?pwd=1hhp\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"包含银河麒麟版本列表\"\u003e包含银河麒麟版本列表\u003c/h2\u003e\n\u003ch3 id=\"一服务器版server全系列\"\u003e一、服务器版（server）全系列\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e兆心-海光版（202303/202503）\u003c/li\u003e\n\u003cli\u003e龙芯3B5000版（202403/202507 V11版/202303）\u003c/li\u003e\n\u003cli\u003e飞腾-鲲鹏版（202404/202503 V11版/202303）\u003c/li\u003e\n\u003cli\u003eIntel-Amd-海光-兆芯版（202507 V11版）\u003c/li\u003e\n\u003cli\u003eHost版 V10 202304（云底座）\u003c/li\u003e\n\u003cli\u003e历史版本：2022-x86版本(old)、2021(old)\u003c/li\u003e\n\u003cli\u003e附赠rufus-U盘刻录工具\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"二桌面版desktop全系列\"\u003e二、桌面版（desktop）全系列\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e兆心-海光版（202503/202403）\u003c/li\u003e\n\u003cli\u003e银河麒麟桌面操作系统（GFB 国-防版）V10（飞腾版）\u003c/li\u003e\n\u003cli\u003e申威版（202503）\u003c/li\u003e\n\u003cli\u003e麒麟9006C版/9000C版（202403）\u003c/li\u003e\n\u003cli\u003e麒麟990版-华为擎云w515\u003c/li\u003e\n\u003cli\u003e龙芯3A5000/3A6000版（202403/202503）\u003c/li\u003e\n\u003cli\u003e龙芯3A4000版（202403）\u003c/li\u003e\n\u003cli\u003e教育版\u003c/li\u003e\n\u003cli\u003e海思麒麟-盘古m900\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e所有镜像均保留官方校验值，可自行核对MD5/SHA1，确保文件完整无损坏。\u003c/p\u003e\n\u003ch2 id=\"镜像适用场景\"\u003e镜像适用场景\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e国产信创服务器部署、政务/企业国产化改造\u003c/li\u003e\n\u003cli\u003e国产PC、笔记本（飞腾/龙芯/海光平台）系统安装\u003c/li\u003e\n\u003cli\u003e信创环境开发测试、国产化软件适配\u003c/li\u003e\n\u003cli\u003e个人学习国产Linux系统、银河麒麟认证备考\u003c/li\u003e\n\u003cli\u003e老旧国产设备系统重装、运维维护\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"使用注意事项\"\u003e使用注意事项\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e网盘链接长期有效，失效可留言补发\u003c/li\u003e\n\u003cli\u003e镜像文件较大，建议使用百度网盘客户端下载\u003c/li\u003e\n\u003cli\u003e安装前建议校验文件完整性，避免安装失败\u003c/li\u003e\n\u003cli\u003e仅用于学习与合法运维、信创项目使用，请勿用于非法用途\u003c/li\u003e\n\u003cli\u003e附赠的rufus工具可用于制作U盘启动盘，快速安装系统\u003c/li\u003e\n\u003c/ol\u003e","title":"银河麒麟服务器/桌面版全版本系统镜像下载｜国产操作系统官方原版ISO百度网盘分享"},{"content":"PostgreSQL 知识点（含实操练习） 一、数据类型 1.1 数值类型 integer/int：整型，取值范围 -21亿 ~ 21亿，适用于存储一般数量、ID等场景；PostgreSQL 中 integer 和 int 无区别。 bigint：长整型，取值范围极大，适用于数据量超过21亿行时的自增主键。 serial/bigserial：自增整数，适用于简单主键；数据量小于21亿可使用 serial，大于21亿使用 bigserial，建议直接使用 bigserial。 numeric(p,s)：精确小数，其中 p 代表总位数，s 代表小数位数，适用于金额、财务数据等对精度要求高的场景。 补充说明：float 和 numeric 的区别——numeric 是精确数字，无精度损失，适合金额；float 是近似值，会存在精度损失。\n1.2 字符类型 varchar(n)：可变长度字符串，最大长度为 n。 text：无长度限制的字符串，适用于不确定长度的文本存储。 1.3 日期/时间类型 timestamp：不带时区的时间戳。 timestamptz：带时区的时间戳。 **timestamptz**推荐使用 的原因：timestamptz 存储时会自动转换为 UTC 时间，读取时根据客户端时区展示，可有效避免时区混乱问题。\n1.4 其他常用类型 boolean：布尔类型，取值为 true 或 false。 jsonb：二进制 JSON 类型，支持索引，适用于灵活存储非结构化数据。 uuid：全局唯一标识符，使用时需配合 uuid-ossp 扩展。 二、TOAST 机制 TOAST 是 PostgreSQL 专门用于存储超过一个数据块的大字段的机制，可高效处理大文本、大二进制等数据。\n三、约束 primary key：主键约束，兼具唯一和非空特性，一张表只能有一个主键。 unique：唯一约束，该列所有值不可重复，但允许存在多个 NULL。 not null：非空约束，禁止该列存储 NULL 值。 check：检查约束，可自定义校验条件（如 age \u0026gt; 0）。 default：默认值约束，当该列未插入数据时，自动填充默认值。 foreign key：外键约束，用于关联另一张表的主键，保证数据完整性。 外键删除关联动作：\non delete cascade：级联删除，当主表主键被删除时，从表关联数据也随之删除。 on delete set null：当主表主键被删除时，从表关联字段设为 NULL（需保证从表关联字段允许为 NULL）。 on delete restrict：限制删除，若主表主键存在从表关联数据，则无法删除该主键。 四、函数与表达式 4.1 字符串函数 || 或 CONCAT()：字符串拼接。 LENGTH()：获取字符串长度。 UPPER()/LOWER()：将字符串转换为大写/小写。 SUBSTRING(string, start, length)：截取字符串，start 为起始位置，length 为截取长度。 REPLACE(string, old, new)：替换字符串中的指定内容，将 old 替换为 new。 REGEXP_MATCHES(string, pattern)：根据正则表达式匹配字符串，返回匹配结果。 4.2 日期/时间函数 --当前时间 SELECT NOW(); -- 2025-04-02 10:23:45.123+08 SELECT CURRENT_DATE; -- 2025-04-02 SELECT CURRENT_TIME; -- 提取部分 SELECT EXTRACT(YEAR FROM NOW()); SELECT DATE_PART(\u0026#39;month\u0026#39;, NOW()); -- 截断到指定精度（常用于报表分组） SELECT DATE_TRUNC(\u0026#39;month\u0026#39;, created_at) FROM orders; -- 计算年龄 SELECT AGE(\u0026#39;2025-04-02\u0026#39;, \u0026#39;1990-01-01\u0026#39;); -- 35 years 3 mons 1 day -- 日期加减 SELECT NOW() + INTERVAL \u0026#39;7 days\u0026#39;; SELECT NOW() - INTERVAL \u0026#39;2 hours\u0026#39;; 4.3 条件表达式 case when：多条件判断，语法为 case when 条件1 then 结果1 when 条件2 then 结果2 else 默认结果 end。 coalesce(value, default)：返回第一个非 NULL 值，若 value 为 NULL，则返回 default。 NULLIF(a, b)：若 a = b，则返回 NULL，否则返回 a。 五、聚合与分组 常用聚合函数（需配合 GROUP BY 分组使用，除非聚合整个表）：\ncount：统计行数。 sum：计算列的总和。 avg：计算列的平均值。 max：获取列的最大值。 min：获取列的最小值。 string_agg：将分组后的字符串拼接。 array_agg：将分组后的结果转为数组 六、组合练习：电商订单统计系统 6.1 建表语句 CREATE TABLE customers ( customer_id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE, reg_date DATE DEFAULT CURRENT_DATE ); CREATE TABLE products ( product_id SERIAL PRIMARY KEY, name TEXT NOT NULL, price NUMERIC(10,2) CHECK (price \u0026gt; 0) ); CREATE TABLE orders ( order_id SERIAL PRIMARY KEY, customer_id INTEGER REFERENCES customers(customer_id), order_date TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE order_items ( item_id SERIAL PRIMARY KEY, order_id INTEGER REFERENCES orders(order_id) ON DELETE CASCADE, product_id INTEGER REFERENCES products(product_id), quantity INTEGER CHECK (quantity \u0026gt; 0), unit_price NUMERIC(10,2) ); 6.2 写入测试数据 INSERT INTO customers (name, email, reg_date) VALUES (\u0026#39;张三\u0026#39;, \u0026#39;zhang@example.com\u0026#39;, \u0026#39;2024-01-15\u0026#39;), (\u0026#39;李四\u0026#39;, NULL, \u0026#39;2024-02-20\u0026#39;), (\u0026#39;王五\u0026#39;, \u0026#39;wang@example.com\u0026#39;, \u0026#39;2024-03-10\u0026#39;), (\u0026#39;赵六\u0026#39;, NULL, \u0026#39;2024-04-01\u0026#39;), (\u0026#39;孙七\u0026#39;, \u0026#39;sun@example.com\u0026#39;, \u0026#39;2024-05-05\u0026#39;); INSERT INTO products (name, price) VALUES (\u0026#39;手机\u0026#39;, 2999.00), (\u0026#39;电脑\u0026#39;, 5999.00), (\u0026#39;耳机\u0026#39;, 199.00), (\u0026#39;鼠标\u0026#39;, 49.90), (\u0026#39;键盘\u0026#39;, 299.00); INSERT INTO orders (customer_id, order_date) VALUES (1, \u0026#39;2024-01-20 10:30:00+08\u0026#39;), (1, \u0026#39;2024-02-15 14:20:00+08\u0026#39;), (2, \u0026#39;2024-03-01 09:15:00+08\u0026#39;), (3, \u0026#39;2024-03-25 16:45:00+08\u0026#39;), (3, \u0026#39;2024-04-10 11:00:00+08\u0026#39;), (5, \u0026#39;2024-05-12 13:30:00+08\u0026#39;); INSERT INTO order_items (order_id, product_id, quantity, unit_price) VALUES (1, 1, 1, 2999.00), (1, 3, 2, 199.00), (2, 2, 1, 5999.00), (2, 4, 1, 49.90), (3, 5, 2, 299.00), (4, 1, 1, 2999.00), (4, 3, 1, 199.00), (5, 2, 1, 5999.00), (5, 5, 1, 299.00), (5, 4, 2, 49.90), (6, 3, 3, 199.00); 6.3 练习题及答案 题目1：查询每个客户的订单总额 select c.customer_id, c.name, coalesce(sum(oi.quantity*oi.unit_price),0) as total from customers c left join orders o on o.customer_id=c.customer_id left join order_items oi on o.order_id=oi.order_id group by c.customer_id,c.name order by total desc; 题目2：查询从未下过单的客户 方法1（使用 not in）：\nselect name from customers where customer_id not in(select customer_id from orders); 方法2（使用 not exists）：\nSELECT * FROM customers c WHERE NOT EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id ); 补充说明：not in 和 not exists 的区别\nnot in：若子查询返回结果包含 NULL，则整个 NOT IN 条件会变为 UNKNOWN，无法返回任何行，即使外层有匹配数据。 not exists：不受子查询中 NULL 的影响，查询效率更稳定。 建议优先使用 not exists；若子查询可能包含 NULL，优化器会生成更保守的执行计划，导致性能下降。\n题目3：查询购买商品种类数超过3种的客户名称 SELECT c.name FROM customers c JOIN orders o ON c.customer_id = o.customer_id JOIN order_items oi ON o.order_id = oi.order_id GROUP BY c.customer_id, c.name HAVING COUNT(DISTINCT oi.product_id) \u0026gt; 3; linux操作系统有网状态下安装postgres可参考： https://wdhlzy.xyz/posts/postgresql-ubuntu-install/\nwindows11安装postgres可参考： https://wdhlzy.xyz/posts/postgresql-install/\n","permalink":"https://wdhlzy.xyz/posts/postgres/","summary":"\u003ch1 id=\"postgresql-知识点含实操练习\"\u003ePostgreSQL 知识点（含实操练习）\u003c/h1\u003e\n\u003ch1 id=\"一数据类型\"\u003e一、数据类型\u003c/h1\u003e\n\u003ch2 id=\"11-数值类型\"\u003e1.1 数值类型\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003einteger/int\u003c/code\u003e：整型，取值范围 -21亿 ~ 21亿，适用于存储一般数量、ID等场景；PostgreSQL 中 \u003ccode\u003einteger\u003c/code\u003e 和 \u003ccode\u003eint\u003c/code\u003e 无区别。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebigint\u003c/code\u003e：长整型，取值范围极大，适用于数据量超过21亿行时的自增主键。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eserial/bigserial\u003c/code\u003e：自增整数，适用于简单主键；数据量小于21亿可使用 \u003ccode\u003eserial\u003c/code\u003e，大于21亿使用 \u003ccode\u003ebigserial\u003c/code\u003e，建议直接使用 \u003ccode\u003ebigserial\u003c/code\u003e。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enumeric(p,s)\u003c/code\u003e：精确小数，其中 \u003ccode\u003ep\u003c/code\u003e 代表总位数，\u003ccode\u003es\u003c/code\u003e 代表小数位数，适用于金额、财务数据等对精度要求高的场景。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e补充说明\u003c/strong\u003e：\u003ccode\u003efloat\u003c/code\u003e 和 \u003ccode\u003enumeric\u003c/code\u003e 的区别——\u003ccode\u003enumeric\u003c/code\u003e 是精确数字，无精度损失，适合金额；\u003ccode\u003efloat\u003c/code\u003e 是近似值，会存在精度损失。\u003c/p\u003e\n\u003ch2 id=\"12-字符类型\"\u003e1.2 字符类型\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003evarchar(n)\u003c/code\u003e：可变长度字符串，最大长度为 \u003ccode\u003en\u003c/code\u003e。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etext\u003c/code\u003e：无长度限制的字符串，适用于不确定长度的文本存储。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"13-日期时间类型\"\u003e1.3 日期/时间类型\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003etimestamp\u003c/code\u003e：不带时区的时间戳。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etimestamptz\u003c/code\u003e：带时区的时间戳。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e**\u003ccode\u003etimestamptz\u003c/code\u003e**\u003cstrong\u003e推荐使用  的原因\u003c/strong\u003e：\u003ccode\u003etimestamptz\u003c/code\u003e 存储时会自动转换为 UTC 时间，读取时根据客户端时区展示，可有效避免时区混乱问题。\u003c/p\u003e\n\u003ch2 id=\"14-其他常用类型\"\u003e1.4 其他常用类型\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eboolean\u003c/code\u003e：布尔类型，取值为 \u003ccode\u003etrue\u003c/code\u003e 或 \u003ccode\u003efalse\u003c/code\u003e。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ejsonb\u003c/code\u003e：二进制 JSON 类型，支持索引，适用于灵活存储非结构化数据。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003euuid\u003c/code\u003e：全局唯一标识符，使用时需配合 \u003ccode\u003euuid-ossp\u003c/code\u003e 扩展。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"二toast-机制\"\u003e二、TOAST 机制\u003c/h1\u003e\n\u003cp\u003eTOAST 是 PostgreSQL 专门用于存储超过一个数据块的大字段的机制，可高效处理大文本、大二进制等数据。\u003c/p\u003e\n\u003ch1 id=\"三约束\"\u003e三、约束\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eprimary key\u003c/code\u003e：主键约束，兼具唯一和非空特性，一张表只能有一个主键。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunique\u003c/code\u003e：唯一约束，该列所有值不可重复，但允许存在多个 \u003ccode\u003eNULL\u003c/code\u003e。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003enot null\u003c/code\u003e：非空约束，禁止该列存储 \u003ccode\u003eNULL\u003c/code\u003e 值。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003echeck\u003c/code\u003e：检查约束，可自定义校验条件（如 \u003ccode\u003eage \u0026gt; 0\u003c/code\u003e）。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edefault\u003c/code\u003e：默认值约束，当该列未插入数据时，自动填充默认值。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eforeign key\u003c/code\u003e：外键约束，用于关联另一张表的主键，保证数据完整性。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e外键删除关联动作：\u003c/p\u003e","title":"PostgreSQL 核心知识点与实操演练（含电商订单统计案例）"},{"content":"一、环境信息 适配Ubuntu 24.04 LTS（内核6.8.0-100-generic）系统，聚焦PostgreSQL 16.13部署与卸载核心操作，命令简洁可直接复制，新手零门槛上手，解决Ubuntu系统PostgreSQL部署、卸载及残留清理需求。\n操作系统：Ubuntu 24.04 LTS 内核版本：6.8.0-100-generic 数据库版本：PostgreSQL 16.13（Ubuntu 16.13-0ubuntu0.24.04.1） 操作用户：具备 sudo 权限的普通用户 二、Ubuntu 24.04 操作系统获取 Ubuntu 24.04 操作系统安装包：【此处插入操作系统包网盘链接】 三、PostgreSQL 部署步骤 # 1. 更新系统软件源 sudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y # 2. 安装 PostgreSQL 16.13 sudo apt install postgresql postgresql-contrib -y # 3. 验证部署成功（查看版本+服务状态） psql -V sudo systemctl status postgresql 验证提示：版本输出为psql (PostgreSQL) 16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)、服务状态显示active，即为PostgreSQL 16.13部署成功，可正常使用。\n四、PostgreSQL 卸载步骤 # PostgreSQL 16.13 彻底卸载，清除所有残留文件和依赖（Ubuntu 24.04专用） sudo apt purge postgresql postgresql-contrib -y sudo apt autoremove -y sudo rm -rf /var/lib/postgresql/ sudo rm -rf /etc/postgresql/ 五、总结 本文聚焦Ubuntu 24.04 LTS（内核6.8.0-100-generic）系统下PostgreSQL 16.13的部署与卸载，核心命令可直接复制，快速完成PostgreSQL 16.13搭建、验证及彻底卸载，解决新手部署困惑与卸载残留问题，适配日常快速部署、清理场景，是Ubuntu系统PostgreSQL 16.13部署卸载必备教程。\nwindows11安装postgres可参考： https://wdhlzy.xyz/posts/postgresql-install/\n","permalink":"https://wdhlzy.xyz/posts/postgresql-ubuntu-install/","summary":"\u003ch2 id=\"一环境信息\"\u003e一、环境信息\u003c/h2\u003e\n\u003cp\u003e适配Ubuntu 24.04 LTS（内核6.8.0-100-generic）系统，聚焦PostgreSQL 16.13部署与卸载核心操作，命令简洁可直接复制，新手零门槛上手，解决Ubuntu系统PostgreSQL部署、卸载及残留清理需求。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e操作系统：Ubuntu 24.04 LTS\u003c/li\u003e\n\u003cli\u003e内核版本：6.8.0-100-generic\u003c/li\u003e\n\u003cli\u003e数据库版本：PostgreSQL 16.13（Ubuntu 16.13-0ubuntu0.24.04.1）\u003c/li\u003e\n\u003cli\u003e操作用户：具备 sudo 权限的普通用户\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"二ubuntu-2404-操作系统获取\"\u003e二、Ubuntu 24.04 操作系统获取\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUbuntu 24.04 操作系统安装包：【此处插入操作系统包网盘链接】\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"三postgresql-部署步骤\"\u003e三、PostgreSQL 部署步骤\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 1. 更新系统软件源\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt update \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e sudo apt upgrade -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 2. 安装 PostgreSQL 16.13\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt install postgresql postgresql-contrib -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 3. 验证部署成功（查看版本+服务状态）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epsql -V\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo systemctl status postgresql\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg alt=\"Ubuntu 24.04 部署PostgreSQL 16.13 命令执行\" loading=\"lazy\" src=\"/posts/postgresql-ubuntu-install/image-20260405124824898.png\"\u003e\u003c/p\u003e\n\u003cp\u003e验证提示：版本输出为\u003ccode\u003epsql (PostgreSQL) 16.13 (Ubuntu 16.13-0ubuntu0.24.04.1)\u003c/code\u003e、服务状态显示\u003ccode\u003eactive\u003c/code\u003e，即为PostgreSQL 16.13部署成功，可正常使用。\u003c/p\u003e\n\u003ch2 id=\"四postgresql-卸载步骤\"\u003e四、PostgreSQL 卸载步骤\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# PostgreSQL 16.13 彻底卸载，清除所有残留文件和依赖（Ubuntu 24.04专用）\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt purge postgresql postgresql-contrib -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo apt autoremove -y\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo rm -rf /var/lib/postgresql/\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esudo rm -rf /etc/postgresql/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"五总结\"\u003e五、总结\u003c/h2\u003e\n\u003cp\u003e本文聚焦Ubuntu 24.04 LTS（内核6.8.0-100-generic）系统下PostgreSQL 16.13的部署与卸载，核心命令可直接复制，快速完成PostgreSQL 16.13搭建、验证及彻底卸载，解决新手部署困惑与卸载残留问题，适配日常快速部署、清理场景，是Ubuntu系统PostgreSQL 16.13部署卸载必备教程。\u003c/p\u003e","title":"Ubuntu 24.04 部署与卸载 PostgreSQL 16.13 教程（新手必看）"},{"content":"1.安装包下载 PostgreSQL18.3安装包 链接: https://pan.baidu.com/s/1N41W1OeI2F679Wihe-41tQ?pwd=6edh\n2.安装步骤 安装环境：windows11，安装postgresql 18.3版本\n2.1 右键管理员身份打开 2.2 点next下一步 2.3 选择安装目录 记得要修改一下目录，最好只把C盘改为其他盘,建议安装到 D/E 盘，避免占用系统盘空间，后期数据量大不会导致 C 盘爆满。\n2.4 根据需要勾选安装项 PostgreSQL Server：数据库\npgAdmin 4：官方自带数据库管理工具\nStack Bulder：插件扩展功能\nCommand Line Tools：命令行工具psql\n2.5 选择数据存储目录 前面的改了其他盘，这里默认就改了，如果没有修改的话，这里一定记得不要放在C盘，否则数据很容易撑爆C盘,数据目录建议和安装目录保持一致，方便后期管理、备份、迁移。\n2.6 设置用户postgres的密码 此密码为数据库超级管理员 postgres 的密码，务必牢记，连接数据库时必须使用。\n2.7 设置端口 默认端口 5432 为 PostgreSQL 标准端口，不建议修改，避免连接工具不兼容。\n2.8 选择地区 选择默认地区，不同的地区文字，排序，字符等会有区别\n2.9 安装前确认 2.10 等待安装 2.11 安装完成 这个可以取消掉，先不用装驱动和额外插件，点击finish即可。\n3 连接postgresql数据库 3.1 搜索pgAdmin工具并点击打开 安装完成后，可通过 pgAdmin 4 图形化工具管理数据库，无需命令行操作。\n3.2 填写连接信息 右键server点击register-server\n这里name随便写\n这里填写localhost或者127.0.0.1，下面的password填写好自己设置的密码，然后点击save就可以了\n最终连接成功\n4 卸载步骤 4.1 打开控制面板卸载 Entire application：彻底卸载整个 PostgreSQL，包括所有安装的文件、组件、服务，避免残留。 彻底卸载可避免服务残留、端口占用、重装失败等问题。 Individual components：只卸载部分组件，会留下程序主体。\n4.2 等待卸载 4.3 手动删除文件夹 点击ok，然后去手动删除文件夹\n以上就是Windows 安装 PostgreSQL 18.3的完整流程，包括安装、连接、卸载三大核心环节，按照步骤操作即可正常使用 PostgreSQL 数据库。\nlinux操作系统有网状态下安装postgres可参考： https://wdhlzy.xyz/posts/postgresql-ubuntu-install/\n","permalink":"https://wdhlzy.xyz/posts/postgresql-install/","summary":"\u003ch2 id=\"1安装包下载\"\u003e1.安装包下载\u003c/h2\u003e\n\u003cp\u003ePostgreSQL18.3安装包\n链接: \u003ca href=\"https://pan.baidu.com/s/1N41W1OeI2F679Wihe-41tQ?pwd=6edh\"\u003ehttps://pan.baidu.com/s/1N41W1OeI2F679Wihe-41tQ?pwd=6edh\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"2安装步骤\"\u003e2.安装步骤\u003c/h2\u003e\n\u003cp\u003e安装环境：windows11，安装postgresql 18.3版本\u003c/p\u003e\n\u003ch3 id=\"21-右键管理员身份打开\"\u003e2.1 右键管理员身份打开\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL 18.3安装步骤-右键以管理员身份运行安装程序\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp1.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"22-点next下一步\"\u003e2.2 点next下一步\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL安装向导欢迎界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp2.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"23-选择安装目录\"\u003e2.3 选择安装目录\u003c/h3\u003e\n\u003cp\u003e记得要修改一下目录，最好只把C盘改为其他盘,建议安装到 D/E 盘，避免占用系统盘空间，后期数据量大不会导致 C 盘爆满。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Windows安装PostgreSQL-安装目录配置界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp3.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"24-根据需要勾选安装项\"\u003e2.4 根据需要勾选安装项\u003c/h3\u003e\n\u003cp\u003ePostgreSQL Server：数据库\u003c/p\u003e\n\u003cp\u003epgAdmin 4：官方自带数据库管理工具\u003c/p\u003e\n\u003cp\u003eStack Bulder：插件扩展功能\u003c/p\u003e\n\u003cp\u003eCommand Line Tools：命令行工具psql\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL安装组件选择界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp4.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"25-选择数据存储目录\"\u003e2.5 选择数据存储目录\u003c/h3\u003e\n\u003cp\u003e前面的改了其他盘，这里默认就改了，如果没有修改的话，这里一定记得不要放在C盘，否则数据很容易撑爆C盘,数据目录建议和安装目录保持一致，方便后期管理、备份、迁移。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL数据存储目录配置界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp5.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"26-设置用户postgres的密码\"\u003e2.6 设置用户postgres的密码\u003c/h3\u003e\n\u003cp\u003e此密码为数据库超级管理员 postgres 的密码，务必牢记，连接数据库时必须使用。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL超级用户postgres密码设置界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp6.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"27-设置端口\"\u003e2.7 设置端口\u003c/h3\u003e\n\u003cp\u003e默认端口 5432 为 PostgreSQL 标准端口，不建议修改，避免连接工具不兼容。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL服务端口配置界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp7.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"28-选择地区\"\u003e2.8 选择地区\u003c/h3\u003e\n\u003cp\u003e选择默认地区，不同的地区文字，排序，字符等会有区别\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL数据库集群地区配置界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp8.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"29-安装前确认\"\u003e2.9 安装前确认\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL安装前配置信息确认界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp9.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL安装就绪确认界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp10.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"210-等待安装\"\u003e2.10 等待安装\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"PostgreSQL安装进度界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp11.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"211-安装完成\"\u003e2.11 安装完成\u003c/h3\u003e\n\u003cp\u003e这个可以取消掉，先不用装驱动和额外插件，点击finish即可。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Windows PostgreSQL安装完成界面\" loading=\"lazy\" src=\"/posts/postgresql-install/postgresql-install-setp12.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"3-连接postgresql数据库\"\u003e3 连接postgresql数据库\u003c/h2\u003e\n\u003ch3 id=\"31-搜索pgadmin工具并点击打开\"\u003e3.1 搜索pgAdmin工具并点击打开\u003c/h3\u003e\n\u003cp\u003e安装完成后，可通过 pgAdmin 4 图形化工具管理数据库，无需命令行操作。\u003c/p\u003e","title":"Windows 11 安装 PostgreSQL 18.3 图文教程（含卸载）"},{"content":"在日常GaussDB数据库运维中，DBeaver是最常用的可视化管理工具之一。但很多用户会遇到无外网环境无法自动下载驱动、驱动配置错误导致连接失败等问题。本文基于DBeaver 25.3.3版本，详细讲解有外网、无外网两种场景下的完整连接步骤，附驱动/安装包下载地址和常见问题避坑，帮你一次性搞定DBeaver连接GaussDB。\n一、前期准备 1.1 工具版本说明 本次实操使用以下版本，兼容性最佳：\n客户端工具：DBeaver 25.3.3(x86版本，支持Windows/macOS/Linux) 数据库：GaussDB(兼容主流版本，GaussDB 200/600通用) 核心依赖：GaussDB JDBC驱动包(gsjdbc4.jar，无外网环境必备) 1.2 资源下载地址 DBeaver 25.3.3安装包：链接: https://pan.baidu.com/s/133s26mCv_0UuMfGLPhSjXw?pwd=drgj 提取码: drgj GaussDB JDBC驱动包(gsjdbc4.jar)：链接: https://pan.baidu.com/s/1kjjHDus2t3BI56CzDtCACQ?pwd=nbid 提取码: nbid 二、有外网环境：DBeaver一键连接GaussDB 如果你的DBeaver客户端可以访问外网，可直接通过自动下载驱动完成连接，步骤如下：\n2.1 新建GaussDB数据库连接 打开DBeaver，点击左上角「新建连接」按钮； 在搜索框输入「GaussDB」，选择对应数据库类型，点击「下一步」； ​ 2.2 填写连接参数 在「连接设置」页面，填写GaussDB数据库的核心参数：\n主机：GaussDB服务器IP地址 端口：默认8000(根据实际部署修改) 数据库名：目标数据库名称(如postgres) 用户名/密码：GaussDB数据库的登录账号密码 点击「测试连接」没有报错证明连接成功，点击完成即可在DBeaver中管理GaussDB数据库。\n三、无外网环境：手动上传驱动连接GaussDB 如果客户端无法访问外网，无法自动下载驱动，需手动上传GaussDB JDBC驱动包，步骤如下：\n3.1 打开驱动编辑界面 新建GaussDB连接，填写完连接参数后，切换到「驱动属性」标签页； 点击「编辑驱动设置」按钮，进入驱动配置界面； 3.2 手动添加GaussDB JDBC驱动 在「驱动文件」标签页，点击「添加文件」，选择提前下载好的gsjdbc4.jar驱动包； 3.3 测试连接并完成配置 点击「确定」保存驱动配置，回到连接设置页面； 点击「测试连接」，提示「连接成功」即完成配置； 点击「完成」，即可在无外网环境下使用DBeaver管理GaussDB。 四、常见问题避坑 4.1 问题1：添加驱动之后还是无法连接 原因：驱动包缺失、驱动冲突或驱动类配置错误。 解决方案：\n确认已添加gsjdbc4.jar驱动包； 删除所有多余驱动，仅保留gsjdbc4.jar； ","permalink":"https://wdhlzy.xyz/posts/dbeaver-connect-gaussdb/","summary":"\u003cp\u003e在日常GaussDB数据库运维中，DBeaver是最常用的可视化管理工具之一。但很多用户会遇到\u003cstrong\u003e无外网环境无法自动下载驱动\u003c/strong\u003e、\u003cstrong\u003e驱动配置错误导致连接失败\u003c/strong\u003e等问题。本文基于DBeaver 25.3.3版本，详细讲解有外网、无外网两种场景下的完整连接步骤，附驱动/安装包下载地址和常见问题避坑，帮你一次性搞定DBeaver连接GaussDB。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"一前期准备\"\u003e一、前期准备\u003c/h2\u003e\n\u003ch3 id=\"11-工具版本说明\"\u003e1.1 工具版本说明\u003c/h3\u003e\n\u003cp\u003e本次实操使用以下版本，兼容性最佳：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e客户端工具：DBeaver 25.3.3(x86版本，支持Windows/macOS/Linux)\u003c/li\u003e\n\u003cli\u003e数据库：GaussDB(兼容主流版本，GaussDB 200/600通用)\u003c/li\u003e\n\u003cli\u003e核心依赖：GaussDB JDBC驱动包(\u003ccode\u003egsjdbc4.jar\u003c/code\u003e，无外网环境必备)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"12-资源下载地址\"\u003e1.2 资源下载地址\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDBeaver 25.3.3安装包：链接: \u003ca href=\"https://pan.baidu.com/s/133s26mCv_0UuMfGLPhSjXw?pwd=drgj\"\u003ehttps://pan.baidu.com/s/133s26mCv_0UuMfGLPhSjXw?pwd=drgj\u003c/a\u003e  提取码: drgj\u003c/li\u003e\n\u003cli\u003eGaussDB JDBC驱动包(\u003ccode\u003egsjdbc4.jar\u003c/code\u003e)：链接: \u003ca href=\"https://pan.baidu.com/s/1kjjHDus2t3BI56CzDtCACQ?pwd=nbid\"\u003ehttps://pan.baidu.com/s/1kjjHDus2t3BI56CzDtCACQ?pwd=nbid\u003c/a\u003e 提取码: nbid\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"二有外网环境dbeaver一键连接gaussdb\"\u003e二、有外网环境：DBeaver一键连接GaussDB\u003c/h2\u003e\n\u003cp\u003e如果你的DBeaver客户端可以访问外网，可直接通过自动下载驱动完成连接，步骤如下：\u003c/p\u003e\n\u003ch3 id=\"21-新建gaussdb数据库连接\"\u003e2.1 新建GaussDB数据库连接\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e打开DBeaver，点击左上角「新建连接」按钮；\u003c/li\u003e\n\u003cli\u003e在搜索框输入「GaussDB」，选择对应数据库类型，点击「下一步」；\n\u003cimg alt=\"image-20260319111046002\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319111046002.png\"\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e​       \u003cimg alt=\"image-20260319111117473\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319111117473.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"22-填写连接参数\"\u003e2.2 填写连接参数\u003c/h3\u003e\n\u003cp\u003e在「连接设置」页面，填写GaussDB数据库的核心参数：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e主机：GaussDB服务器IP地址\u003c/li\u003e\n\u003cli\u003e端口：默认\u003ccode\u003e8000\u003c/code\u003e(根据实际部署修改)\u003c/li\u003e\n\u003cli\u003e数据库名：目标数据库名称(如\u003ccode\u003epostgres\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e用户名/密码：GaussDB数据库的登录账号密码\n\u003cimg alt=\"image-20260319111135401\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319111135401.png\"\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e点击「测试连接」没有报错证明连接成功，点击完成即可在DBeaver中管理GaussDB数据库。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"三无外网环境手动上传驱动连接gaussdb\"\u003e三、无外网环境：手动上传驱动连接GaussDB\u003c/h2\u003e\n\u003cp\u003e如果客户端无法访问外网，无法自动下载驱动，需手动上传GaussDB JDBC驱动包，步骤如下：\u003c/p\u003e\n\u003ch3 id=\"31-打开驱动编辑界面\"\u003e3.1 打开驱动编辑界面\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e新建GaussDB连接，填写完连接参数后，切换到「驱动属性」标签页；\u003c/li\u003e\n\u003cli\u003e点击「编辑驱动设置」按钮，进入驱动配置界面；\n\u003cimg alt=\"image-20260319111633161\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319111633161.png\"\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"32-手动添加gaussdb-jdbc驱动\"\u003e3.2 手动添加GaussDB JDBC驱动\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e在「驱动文件」标签页，点击「添加文件」，选择提前下载好的\u003ccode\u003egsjdbc4.jar\u003c/code\u003e驱动包；\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg alt=\"image-20260319111705020\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319111705020.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image-20260319112006092\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319112006092.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image-20260319112158458\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319112158458.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"33-测试连接并完成配置\"\u003e3.3 测试连接并完成配置\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e点击「确定」保存驱动配置，回到连接设置页面；\u003c/li\u003e\n\u003cli\u003e点击「测试连接」，提示「连接成功」即完成配置；\u003c/li\u003e\n\u003cli\u003e点击「完成」，即可在无外网环境下使用DBeaver管理GaussDB。\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"四常见问题避坑\"\u003e四、常见问题避坑\u003c/h2\u003e\n\u003ch3 id=\"41-问题1添加驱动之后还是无法连接\"\u003e4.1 问题1：添加驱动之后还是无法连接\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e原因\u003c/strong\u003e：驱动包缺失、驱动冲突或驱动类配置错误。\n\u003cstrong\u003e解决方案\u003c/strong\u003e：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e确认已添加\u003ccode\u003egsjdbc4.jar\u003c/code\u003e驱动包；\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e删除所有多余驱动，仅保留\u003ccode\u003egsjdbc4.jar\u003c/code\u003e；\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg alt=\"image-20260322113511002\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260322113511002.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image-20260319112215509\" loading=\"lazy\" src=\"/posts/dbeaver-connect-gaussdb/image-20260319112215509.png\"\u003e\u003c/p\u003e","title":"DBeaver连接GaussDB完整教程：有/无外网环境配置(附驱动下载\u0026避坑)"}]