windowspostgresql导出数据库
直接上命令。出数Windows下导出PostgreSQL数据库,据库最省事的出数办法是打开CMD,敲一行pg_dump。据库别急着去翻开始菜单找pgAdmin——那玩意儿图形界面点半天,出数真不如命令行来得快。据库我见过太多人卡在“环境变量没配”这一步,出数报错'pg_dump' 不是据库内部或外部命令,然后开始怀疑人生。出数
先解决这个。据库PostgreSQL安装完,出数默认路径在C:\Program Files\PostgreSQL\16\bin(版本号可能不同)。据库把这个路径加到系统环境变量Path里,出数或者更粗暴一点:直接在CMD里cd进这个bin目录再操作。据库我习惯后者,出数省得改环境变量还要重启终端。
假设数据库叫mydb,用户名postgres,想导出成SQL文件放到D盘。命令长这样:
pg_dump -U postgres -h localhost -p 5432 -d mydb -f D:\backup\mydb.sql 回车后会提示输入密码。输完等着就行。文件大小取决于数据量,几百MB的库大概几十秒。注意-f后面的路径,目录必须提前存在,pg_dump不会帮你创建文件夹。有次我写了个不存在的路径,它直接报错退出,连个友好提示都没有。
如果只想导结构,不要数据,加-s参数。反过来只要数据不要建表语句,用-a。这两个场景其实挺常见——比如你只想把生产环境的数据拉到本地测试,表结构本地已经有了,那就-a。但要注意,数据里如果有外键约束,导入顺序可能出问题,pg_dump默认按字母序导表,不一定符合依赖关系。稳妥点还是全导。
还有个坑:权限。Windows下用CMD跑pg_dump,默认以当前Windows用户身份连接。如果PostgreSQL配置的是peer或md5认证,得确保-U指定的用户有权限。我遇到过用管理员身份打开CMD反而连不上的情况,因为PostgreSQL的pg_hba.conf里对127.0.0.1的规则写的是scram-sha-256,跟用户是不是管理员没关系。密码对了就行。
导出整个集群所有数据库?pg_dump做不到,它一次只能导一个库。要全导用pg_dumpall,命令类似:
pg_dumpall -U postgres -f D:\backup\all.sql 但这会把所有库、角色、表空间全塞进一个文件。恢复的时候用psql -U postgres -f D:\backup\all.sql。文件可能巨大,我见过一个200GB的集群导出来,SQL文件1.5TB,打开都费劲。这种场景不如用pg_basebackup做物理备份,但那是另一个话题了。
自定义格式导出更灵活。加-Fc参数,生成的是二进制压缩文件,后缀通常用.dump。恢复时用pg_restore,可以选只恢复某张表,或者并行恢复加速。pg_restore -U postgres -d mydb -j 4 D:\backup\mydb.dump,-j 4表示4个线程同时干活。大库恢复能快不少。但注意,自定义格式不能直接用psql执行,必须走pg_restore。
最后说个实际遇到的坑:编码。Windows中文版CMD默认代码页是936(GBK),而PostgreSQL数据库通常是UTF-8。如果数据里有中文,导出时可能报invalid byte sequence for encoding "GBK"。解决办法是先在CMD里执行chcp 65001切到UTF-8,或者设置环境变量PGCLIENTENCODING=UTF8。我一般直接写个bat脚本,第一行就chcp 65001,省心。
导出完检查一下文件大小。如果只有几KB,大概率是空的——要么库名写错,要么权限不够只导出了schema。打开SQL文件看看开头有没有CREATE TABLE,没有的话就是没导到数据。别问我怎么知道的。
(责任编辑:热点)














