接手过不少Windows服务器上的PostgreSQL数据库问题,最典型的一类不是高并发、不是复杂SQL调优,而是“测试库装好了,应用连不上”“服务起不来”“查询中文全是乱码”。这些问题看起来基础,实际上一旦卡住,开发和联调进度就全堵在环境上。这篇文章主要面向需要在内网Windows服务器上搭建PostgreSQL测试库的运维、开发同事,也适合刚接触PostgreSQL、想快速用Windows环境跑通一套可用测试库的读者。我会从测试库的定位讲起,把安装、配置、排障、日常维护这些环节中Windows版PostgreSQL特有的细节和踩过的坑完整过一遍,读完你至少能少走一半弯路。
1. 测试库定位:在Windows上搭PostgreSQL到底要解决什么问题
1.1 测试库和生产库之间,差的不只是数据
很多人觉得测试库就是把PostgreSQL装上、建几个库、给开发开个账号就完事了。实际项目里这样做的后果,往往是在联调阶段集中爆发:应用连不上、权限不对、编码不统一、配置跟生产差异太大导致测试结果不可信。
测试库的本质是“生产环境的缩小版”,它的任务不是单纯跑通流程,而是要尽量还原生产环境的行为。比如生产库用的PostgreSQL 16,测试库最好也装16;生产库字符集是UTF8,测试库就不要图省事选了默认的SQL_ASCII;生产库连接走的是密码认证,测试库就别开trust免密。这些细节决定了测试结论有没有参考价值。
另一个容易忽略的维度是“测试库要经得起折腾”。开发人员会执行各种迁移脚本、批量更新、索引重建,测试库要能快速恢复、快速重建,而不是大家共用一个库,谁都不敢动。
1.2 为什么Windows平台仍然是测试库的常见选择
前几年流行一种观点:PostgreSQL跑在Linux上才专业,Windows上就是玩具。实际在企业内网里,Windows Server的存量非常大,尤其很多业务系统本身就是Windows部署,测试库放在同一台Windows服务器上,联调时网络路径最短、权限模型最好统一。
Windows上搭建PostgreSQL还有一个现实优势:图形化安装、服务化管理、事件查看器排错,对不熟悉命令行的同事更友好。很多测试库并不是专职DBA在管,而是开发负责人兼职维护,这时候Windows原生的服务管理、计划任务就能省不少事。
当然,Windows版本也有它的短板:高并发下性能不如Linux、某些扩展需要额外编译、文件句柄和共享内存模型不同。所以我的建议是:Windows适合做开发测试库、集成测试库,承载压力测试或生产级负载还是放到Linux环境更稳妥。
1.3 动手之前,先把这几个问题想清楚
根据我自己的经验,凡是搭建过程中返工的,几乎都是前期没定清楚需求。我列了一张问题清单,每次搭测试库前先过一遍:
| 问题 | 需要确认的内容 | 常见默认选择 |
|---|---|---|
| PostgreSQL版本 | 生产用什么版本,测试就用什么版本 | 16.x(当前稳定版) |
| 字符集编码 | 业务数据是否有中文/多语言 | UTF8 |
| 数据目录位置 | 放系统盘还是独立数据盘 | 独立数据盘,避免占用C盘空间 |
| 超级用户密码 | 要有足够强度的独立密码 | 不推荐纯数字弱密码 |
| 访问来源 | 哪些IP/网段需要连接 | 仅内网网段,禁止公网 |
| 端口 | 是否与现有服务冲突 | 5432,冲突则换5433或自定义 |
这个清单看起来简单,但每一个都埋着坑。比如字符集,Windows安装器的默认locale经常跟着系统区域走,如果安装时没注意,建出来的数据库就是中文环境下的GBK编码,后续应用按UTF8连接,轻则乱码、重则报错。再比如数据目录,默认装到Program Files下面,数据库文件跟程序文件混在一起,备份恢复、空间扩容都不方便。
还有一点要提前规划:测试库很可能不止一个。不同项目、不同迭代版本需要各自的库,建议在实例层面统一命名规范,比如用项目代号加环境名,避免后面库多了分不清。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装阶段的Windows专属细节:从安装包到服务跑起来
2.1 安装包选型:图形安装器还是二进制zip包
PostgreSQL在Windows上主要有两种安装方式,一是官方EDB图形安装器(postgresql-16.x-windows-x64.exe),二是官方提供的二进制zip包。绝大多数场景我用图形安装器,尤其是给不常碰命令行的同事交付环境时,图形化步骤直观、服务自动注册、pgAdmin一并装好,开箱即用。
zip包则适合两类场景:一类是你需要在多台机器上批量部署,zip包可以做到免安装、脚本化复制;另一类是机器上没有管理员权限,或者不想污染系统服务列表,想把PostgreSQL当成普通软件单独启停。zip包解压后需要手动执行initdb初始化数据目录、手动注册服务,门槛高一些,但灵活性也高。
下面这个表格从几个维度对比一下两种方式:
| 对比项 | EDB图形安装器 | zip二进制包 |
|---|---|---|
| 安装速度 | 5~10分钟 | 解压即可,初始化约1分钟 |
| 服务注册 | 自动注册Windows服务 | 手动pg_ctl register或注册 |
| 附加工具 | 自带pgAdmin、Stack Builder | 只有基础bin工具 |
| 适合场景 | 单机测试库、新手运维 | 批量部署、定制化目录 |
| 升级灵活性 | 需要重新跑安装器 | 替换目录即可,可多版本共存 |
我个人的习惯是:如果这台机器上以后可能跑多个PostgreSQL版本,优先用zip包,每个版本一个目录,端口错开,干净利落。如果只是日常做项目测试库,图形安装器就够了。
2.2 安装向导里最容易跳过的几个坑
EDB安装器一路Next的默认选项里,有三个地方我建议修改。
第一个是数据目录。安装器默认把数据目录放在 C:\Program Files\PostgreSQL\16\data,这个位置非常不推荐。原因很简单:C盘既是系统盘又是程序盘,数据库的WAL日志、数据文件会持续增长,一旦C盘空间满了,系统本身都会出问题。我一般会专门分一个D盘或数据分区,数据目录建到 D:\pgdata\16,独立管理、独立监控。
第二个是locale和字符集。安装器会让你选locale,默认跟着Windows系统区域走,国内机器经常是“Chinese (Simplified)_China.936”,也就是GBK编码。如果你不想后续被中文乱码折腾,这一步直接选“C”或者“UTF8”。注意,安装时选定的locale会作为template1和template0的默认编码,后续创建的所有数据库都会继承。所以这里选错,后面改起来非常麻烦,不是简单改个参数就能解决的。
第三个是超级用户密码。很多人为了图省事设置一个纯数字短密码,比如123456,结果没过多久就被扫描工具爆破。测试库虽然不直接暴露公网,但内网并不等于绝对安全。建议密码至少12位以上,包含大小写字母、数字和符号。另外要记住:PostgreSQL的超级用户默认叫postgres,和Windows管理员账号不是一回事,别搞混。
安装完成后,默认还会勾选安装pgAdmin和Stack Builder。pgAdmin建议保留,图形化查数据、看执行计划都很方便。Stack Builder我一般取消,它主要是用来装附加组件和驱动的,测试库用不上。
2.3 安装完先做三件事,别急着建库
安装完成后,第一步是验证Windows服务是否正常启动。打开服务管理器,找到 postgresql-x64-16 这个服务,确认状态是“正在运行”,启动类型建议改成“自动”。如果服务起不来,下载安装日志或查看Windows事件查看器,绝大多数情况是端口被占用或数据目录权限不对,后面第4节会详细说排查方法。
第二步是配置命令行环境。安装器默认不会把PostgreSQL的bin目录加到系统PATH里,这导致你打开cmd输入psql会提示“不是内部或外部命令”。我建议手动把 C:\Program Files\PostgreSQL\16\bin 加入系统环境变量PATH,这样后续执行psql、pg_dump、pg_restore都能直接用。如果你用的是zip包,这一步尤其重要。
第三步是做一个最基本的连接测试。在cmd里执行:
bash复制psql -U postgres -d postgres -c "select version();"
输入密码后能正常返回版本信息,说明安装成功。接着顺手建一个测试库:
sql复制CREATE DATABASE testdb ENCODING 'UTF8' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
这里为什么要指定ENCODING和TEMPLATE template0?因为直接用默认template1建库,会继承安装时选的locale,如果你安装时选的是GBK,建出来的库就是GBK编码。指定template0可以从一个干净的模板创建,避免继承那些不想要的默认设置。
3. 配置文件调参:测试库不能光“能连”还得“好用”
3.1 postgresql.conf里值得动手改的参数
装好的PostgreSQL默认配置非常保守,直接跑业务会出现“能连但跑不快”的情况。这不是Bug,而是默认参数面向通用环境设计,要以最小资源开销保证能启动。测试库需要根据机器的实际配置做一些调整。
配置文件在数据目录下,我的是 D:\pgdata\16\postgresql.conf。用文本编辑器打开,重点调整这几个参数:
properties复制shared_buffers = 512MB
work_mem = 8MB
maintenance_work_mem = 128MB
max_connections = 200
listen_addresses = 'localhost,192.168.1.100'
log_min_duration_statement = 1000
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'ddl'
shared_buffers 是PostgreSQL的共享缓冲区,相当于数据库自己的缓存池,默认128MB。测试库通常不会特别大,设到物理内存的1/4左右比较合适,比如8GB内存的机器设2GB。但测试库我习惯保守一点,512MB到1GB就够了,省下来的内存留给操作系统和应用程序。
work_mem 是单个排序、哈希操作可用的内存,默认4MB。测试库如果经常跑一些复杂的聚合查询、排序查询,可以适当调到8MB或16MB。注意这个参数是“每个操作”的,不是全局的,并发高了会吃内存,别贪心设置太大。
max_connections 默认100,对于测试环境基本够用,但如果开发同事的本地应用和自动化测试脚本同时连上来,100很容易被打满。我会提前看下应用连接池的配置,一般设到200比较宽裕。
listen_addresses 默认是localhost,这意味着其他机器根本连不进来。测试库只要不是本机自用,就一定要改这里。改成 '*' 表示监听所有网卡,也可以写成具体的IP地址,稳妥起见我建议写成明确的IP,减少暴露面。
log_min_duration_statement 设为1000,表示超过1秒的SQL都会记入日志。这对测试库特别有用,开发人员说“接口好慢”,直接查日志就能看到是哪些SQL拖了后腿,不用再抓耳挠腮。
3.2 pg_hba.conf:访问控制是测试库的底线
如果说postgresql.conf决定数据库“快不快”,pg_hba.conf就决定数据库“安不安全”。这个文件控制谁能连、从哪里连、用什么方式认证。
默认的pg_hba.conf有一行是允许本地用户以trust方式连接,这个务必要改掉。trust意味着不需要密码就可以连,虽然测试库不直接暴露公网,但内网如果有人扫描到你的5432端口,trust模式等于直接敞开大门。
我一般会配置成下面这个样子:
properties复制# 本地连接,要求密码
host all all 127.0.0.1/32 scram-sha-256
# 内网网段连接,要求密码
host all all 192.168.1.0/24 scram-sha-256
# IPv6本地连接
host all all ::1/128 scram-sha-256
scram-sha-256 是PostgreSQL 14以后的默认密码认证方式,安全性比之前的md5高不少。如果你的PostgreSQL版本比较老(10以下),才需要考虑md5兼容问题。
这里有一个容易踩的坑:pg_hba.conf的规则是自上而下匹配的,一旦匹配到第一条就不再往下走。所以如果你在最前面写了一条 host all all 0.0.0.0/0 trust,后面写再多安全规则也白搭。规则顺序很重要,最严格的规则放前面,最宽泛的放最后。
修改完pg_hba.conf,不需要重启服务,执行下面命令让配置生效:
bash复制psql -U postgres -c "SELECT pg_reload_conf();"
3.3 Windows上配置生效的方式和Linux略有不同
很多从Linux过来的同事习惯 systemctl restart postgresql,在Windows上对应的是在服务管理器里重启 postgresql-x64-16 服务,或者用命令:
bash复制pg_ctl reload -D "D:\pgdata\16"
注意reload和restart的区别:reload只是重新读取配置文件,不会中断现有连接,适合改pg_hba.conf、部分postgresql.conf参数;restart会重新启动整个实例,所有连接都会断开,适合改那些必须重启才能生效的参数。
max_connections就是个必须重启才生效的参数,改动后不重启,日志里会有提示。shared_buffers虽然不是必须重启,但改完重启能更彻底地清理共享内存。
我踩过的一个坑是:改了postgresql.conf但忘了看日志,以为已经生效,结果实际还是旧参数。后来学乖了,每次调整完会执行:
bash复制psql -U postgres -c "show shared_buffers;"
psql -U postgres -c "show max_connections;"
查一下实际运行值,确保真正生效了才继续往下做事。
4. 测试库高频故障排障:从报错信息追到根本原因
4.1 服务起不来:端口被占用和数据目录权限
Windows上装完PostgreSQL最常见的故障就是服务启动失败。打开服务管理器,服务名后面显示错误,事件查看器里能看到类似下面的信息:
code复制could not bind address: Only one usage of each socket address is normally permitted
这个报错的直接指向就是端口被占用。排查链路是:先确认端口是多少,默认5432,然后执行:
bash复制netstat -ano | findstr 5432
如果输出里有一个PID正在监听5432,说明有其他程序占用了端口。常见的“肇事者”包括:另一个PostgreSQL实例、某些开发工具自带的数据库、甚至一些中间件默认也喜欢用5432。找到PID后,在任务管理器里定位到具体进程,确认是否可以改端口或者停掉那个进程。如果那个进程确实需要保留,就改PostgreSQL的端口配置。
另一个常见的启动失败原因是数据目录权限不对。PostgreSQL服务在Windows上默认以网络服务账号运行,如果数据目录是手动创建的,没有给这个账号授权,就会报类似:
code复制FATAL: data directory "D:/pgdata/16" has invalid permissions
这个问题的根源是Windows NTFS权限和Linux权限模型不同,Windows服务账号需要显式读取、写入、修改权限。解决办法是:右键数据目录,安全选项卡里添加 NETWORK SERVICE 账号,给予完全控制权限,然后重启服务。
还有一次比较特殊的经历:客户的服务器装了杀毒软件,把postgres.exe当成可疑进程隔离了,结果服务启动直接找不到可执行文件。这个排查过程比较曲折,最后在杀毒软件的隔离区里找到了postgres.exe才真相大白。所以如果你的PostgreSQL服务莫名其妙启动失败,除了端口和权限,也看一眼安全软件有没有动你的程序目录。
4.2 中文乱码:Windows控制台和数据库编码的“三方博弈”
中文乱码是Windows上PostgreSQL测试库最高频的问题,没有之一。这个问题的本质是三个编码不一致:数据库存储编码、客户端连接编码、Windows控制台显示编码。
数据库内部用的编码在创建库时确定,我建议统一用UTF8。客户端连接编码由客户端参数决定,psql可以通过环境变量或 \encoding 命令设置。Windows控制台默认代码页是936(GBK),当你用psql查询UTF8的数据时,控制台按GBK去解码,自然就出乱码了。
解决办法有几种:
第一,在cmd里先执行 chcp 65001,把控制台代码页切到UTF8,再启动psql。这个方法临时有效,但每次打开新的cmd窗口都要重新执行。
第二,设置Windows环境变量 PGCLIENTENCODING=UTF8,这样psql启动时自动以UTF8作为客户端编码,一劳永逸。
第三,如果只是偶尔查库,直接在psql里执行:
bash复制\encoding UTF8
当然,还有一种乱码不是显示问题,而是数据本身就被写坏了。比如数据库是GBK编码,应用按UTF8连接执行插入,数据进库时就是错乱的,这种只能通过重建数据库解决。所以再次强调安装时要选对locale,这是根子上的问题。
4.3 远程连不上:防火墙、监听地址、认证规则三连查
开发同事跑过来跟你说“数据库连不上”,第一步先确认是本机连还是远程连。如果本机psql能连,远程连不上,按下面顺序排查。
先测网络通不通,在开发机执行:
bash复制telnet 192.168.1.100 5432
如果telnet都连不上,大概率是Windows防火墙拦截了5432端口。需要给Windows防火墙添加入站规则,允许TCP 5432端口。注意限定了作用域是内网的IP地址段,别把规则放成“所有网络”,否则公网也能扫进来。
如果telnet能通,但psql连的时候报 no pg_hba.conf entry for host,说明是pg_hba.conf没有对应的访问规则。检查一下你连进来的IP是不是在允许的网段内,规则写没写对。
如果报 could not connect to server: Connection refused,先看listen_addresses是不是还是默认的localhost。前面说过,这个参数不改,PostgreSQL只监听本机,外网根本连不进来。修改后需要重启服务或至少reload。
还有一点容易被忽略:Windows的网络连接类型。如果你把服务器网络配成了“公用网络”,Windows防火墙对公用网络的默认策略是拒绝入站,即使你加了入站规则也可能不生效。把网络配置文件改成“专用网络”或“域网络”会省很多事。
4.4 密码认证失败:最容易误判的一种报错
psql连接时报:
code复制FATAL: password authentication failed for user "postgres"
这个报错最直接的原因是密码错了,但还有一种情况是pg_hba.conf里认证方式配得不匹配。比如你配的是 scram-sha-256,但PostgreSQL用户密码是在老版本里用md5方式存储的,就会一直认证失败。解决办法是重置密码:
bash复制ALTER USER postgres WITH PASSWORD 'new_password';
还有一个实践中的坑:有些同事在pg_hba.conf里写了 password 认证方式,这个方式传输的是明文密码,虽然能用,但在抓包工具面前等于裸奔,不推荐。统一用scram-sha-256就对了。
5. 测试库日常维护:备份、初始化和自动化的落地方法
5.1 测试库备份:逻辑备份够用,但要练成习惯
测试库的备份策略和生产不完全一样。生产可能要物理备份、PITR、归档日志,测试库做逻辑备份就够了,简单、可移植、恢复灵活。
我用得最多的是pg_dump,备份单个数据库:
bash复制pg_dump -U postgres -d testdb -F c -f D:\backup\testdb_20250101.dump
-F c 是自定义格式,体积小、恢复灵活,可以用pg_restore选择性恢复指定表。对于测试库来说,这是最实用的组合。
恢复的时候,先建一个空库,再恢复数据:
bash复制createdb -U postgres testdb_restore
pg_restore -U postgres -d testdb_restore D:\backup\testdb_20250101.dump
注意pg_restore恢复时如果目标库已经存在同名表,会报错或覆盖。测试库恢复通常想要的是“干净状态”,所以我会先drop数据库再重建,让恢复过程更可靠。
5.2 Windows计划任务实现自动备份
手动备份是靠不住的,人总有忘记的时候。Windows上有计划任务,配合一个简单的bat脚本就能实现定期备份。
我常用的备份脚本如下:
bat复制@echo off
set PGPASSWORD=your_password
set PGBIN=C:\Program Files\PostgreSQL\16\bin
set BACKUP_DIR=D:\backup
set DATE=%date:~0,4%%date:~5,2%%date:~8,2%
"%PGBIN%\pg_dump" -U postgres -d testdb -F c -f "%BACKUP_DIR%\testdb_%DATE%.dump"
然后在“任务计划程序”里创建一个每天凌晨2点执行的任务,调用这个bat脚本。留坑提示:bat里用 %date% 取日期,在不同Windows区域设置下格式不一样,有的机器会带斜杠或中文“星期X”。建议在写脚本前先跑一下 echo %date%,确认格式,避免文件名里出现特殊字符导致生成失败。
设置了PGPASSWORD环境变量可以避免脚本交互式输入密码,但要注意这个方式在脚本里有密码泄露的风险。更稳妥的做法是配置pgpass.conf文件,把连接信息放进去,脚本里不用带密码。
pgpass.conf放在用户主目录的AppData下,格式是 主机:端口:数据库:用户名:密码。Windows下路径是 %APPDATA%\postgresql\pgpass.conf。
5.3 测试库初始化的几个实用技巧
很多测试库需要定期恢复到某个基线状态,或者为不同分支创建独立的库。这种情况下,与其手工一步步执行,不如写一个初始化脚本,一键完成。
我的做法是:维护一个 init_testdb.sql 脚本,里面包含建库、建schema、建公共表、初始化基础数据等所有操作。新开一个测试库时,直接执行:
bash复制psql -U postgres -d postgres -f init_testdb.sql
如果项目用到了pgvector这类扩展,需要在脚本里加上:
sql复制CREATE EXTENSION IF NOT EXISTS vector;
Windows上装pgvector比Linux稍微麻烦一些。官方没有提供Windows安装包,最简单的办法是用EDB的应用程序堆栈管理器安装,或者找编译好的Windows版本。装完之后记得把扩展的dll路径配置到postgresql.conf的 shared_preload_libraries 里(如果扩展要求的话),重启服务才能用。
另外,如果你需要频繁创建“结构一样但数据不同”的测试库,可以利用PostgreSQL的模板库机制。先在一个标准库上做好所有schema和基础数据,然后执行 CREATE DATABASE newdb TEMPLATE stddb;,几秒钟就能复制出一个结构完整的新库。模板库要求没有其他连接占用,所以复制前要把连到stddb的会话都断开。
5.4 连接数告警和慢SQL日志结合使用
测试库的并发通常不高,但一旦开发同事的某段代码写了个死循环查询,或者索引没建好导致全表扫描,连接数和CPU还是会飙起来。这时候去翻日志最有用。
我前面配置了 log_min_duration_statement = 1000,所有超过1秒的SQL都会记录到pg_log目录下。查询慢SQL日志的时候,注意Windows日志文件名带日期,按天切割:
bash复制type D:\pgdata\16\pg_log\postgresql-2025-01-01.log
如果日志太多找不到重点,可以用findstr过滤:
bash复制findstr "duration" postgresql-2025-01-01.log
慢SQL日志是测试库性能排查的第一步。先解决“哪些SQL慢”的问题,再看“为什么慢”,执行计划分析那一套结合起来,基本能覆盖大多数性能问题。
6. 交付测试库时容易忽略的几件事
6.1 环境文档最少要包含这些内容
测试库交付后,开发团队最需要的是准确的连接信息和环境说明。我见过太多项目,数据库密码写在微信群里,版本信息靠口头传播,换个人全抓瞎。
我的环境文档一般就是这么几块:基本信息(实例版本、端口、数据目录位置)、账号清单(超级用户、应用账号、各自的权限和用途)、备份策略(备份时间、备份文件位置、恢复方式)、已知问题(哪些参数被调整过、为什么会调、有什么影响)。
下面是一个最简单的交付记录示例:
| 项目 | 值 |
|---|---|
| 实例版本 | PostgreSQL 16.2 |
| 端口 | 5432 |
| 数据目录 | D:\pgdata\16 |
| 数据库列表 | testdb, appdb |
| 超级用户 | postgres |
| 应用账号 | app_user(仅appdb读写权限) |
| 备份方式 | 每日凌晨2点pg_dump |
| 备份位置 | D:\backup |
| 字符集 | UTF8 |
| 访问控制 | 仅192.168.1.0/24网段,scram-sha-256 |
这份文档不是给我自己看的,是给接手的同事、给半年后需要重建环境的人看的。花十分钟写清楚,能省掉未来不知道多少小时的沟通成本。
6.2 我的验收清单:交付前这三件事必须做
测试库搭完,我都习惯按照一个固定清单验收一遍,确认没有遗留问题再交出去。
第一,验证备份确实能恢复。新建一个测试库,用最近的备份文件恢复一次,确认备份不是“备了个寂寞”。这一步很多人不做,等真出问题时才发现备份脚本有问题。
第二,从开发同事的电脑上模拟远程连接。这一步验证的不是“本机能连”,而是开发环境真实网络路径下能不能连、认证配置对不对、防火墙有没有漏放。
第三,检查密码策略。刚安装完的默认密码有没有改?应用账号是不是每个项目共用一个?测试库哪怕不存敏感数据,共用密码也会增加横向扩散风险,分库分账号是对的。
我尤其想强调第一点。备份恢复演练这件事,我见过太多次了:备份脚本一直在跑,日志也一直显示成功,但直到某天要恢复才发现dump出来的文件是0字节。原因往往是磁盘空间满了,或者脚本里路径写错,pg_dump把错误信息写到了日志里但没人看。定期做一次真实恢复,是成本最低的保障。
6.3 关于Windows测试库的一点个人总结
用Windows搭PostgreSQL测试库,难度不在安装本身,而在后续的配置细节和排障思路。端口冲突、权限问题、编码不统一、连接控制过于宽松,这些坑每一个都能让人折腾半天。但只要做好前期规划,理顺配置文件,把备份和文档当成交付物的一部分,Windows上的PostgreSQL测试库完全可以做到稳定、可靠、省心。
这几年我经手的项目中,测试库虽然没有生产库那么“金贵”,但它的价值一点都不低——开发、联调、回归测试、性能摸底都依赖这套环境。环境越稳定,团队在业务功能上的投入就越聚焦。如果你正在准备搭一套新的测试库,照着这篇文章里的清单走一遍,再根据自己项目的实际情况调整,会省下很多不必要的试错时间。
