使用pgloader迁移数据库时PostgreSQL密码验证失败的问题求助
针对你遇到的pgloader连接PostgreSQL时的密码认证失败问题,结合WSL与Windows的网络环境特性,可尝试以下解决方案:
替换WSL中的localhost为Windows主机IP
WSL环境的localhost虽默认映射Windows系统,但偶尔会存在网络隔离导致的连接异常。先在Windows命令行执行ipconfig获取本地IPv4地址(如192.168.1.100),修改pgloader命令:pgloader mysql://root@localhost:3306/mysqlDB pgsql://postgres:myPassword@192.168.1.100:5432/postgresDB配置PostgreSQL监听所有网络地址
打开PostgreSQL安装目录下的postgresql.conf(通常路径为C:\Program Files\PostgreSQL\16\data\postgresql.conf),修改listen_addresses参数:listen_addresses = '*'修改完成后,在Windows服务列表中找到
PostgreSQL 16服务,右键选择重启使配置生效。更新pg_hba.conf允许WSL网段连接
编辑pg_hba.conf(同上述data目录下),添加或更新以下规则,覆盖WSL默认子网和本地局域网段:host all all 172.17.0.0/16 trust host all all 192.168.0.0/16 trust保存后重启PostgreSQL服务,确保新的认证规则生效。
先验证WSL到PostgreSQL的基础连通性
在WSL Ubuntu中安装PostgreSQL客户端工具,测试连接是否正常:sudo apt update && sudo apt install postgresql-client psql -h 192.168.1.100 -U postgres -d postgresDB若psql能成功连接,再执行pgloader命令;若仍失败,排查pgloader的参数或环境问题。
改用配置文件避免命令行密码转义问题
若密码包含特殊字符,命令行参数可能出现转义错误。创建migrate_config.load配置文件:LOAD DATABASE FROM mysql://root@localhost:3306/mysqlDB INTO pgsql://postgres:myPassword@192.168.1.100:5432/postgresDB WITH include drop, create tables, create indexes, reset sequences;运行pgloader时指定该文件:
pgloader migrate_config.load
内容的提问来源于stack exchange,提问作者Aliquam

