Docker部署PostgreSQL适配CordApp:用户创建验证及故障排查
验证PostgreSQL用户是否创建成功的方法及失败处理步骤
一、验证用户是否创建成功的命令
别担心,我给你两种简单的验证方式,选哪种都行:
- 进入容器交互查询
先执行这条命令进入PostgreSQL容器的交互环境:
docker exec -it postgres_for_corda psql -U postgres
进入后输入这条SQL查询所有用户:
SELECT usename FROM pg_user;
如果party_a出现在结果列表里,就说明创建成功啦。
- 宿主机直接执行查询(无需进入容器)
嫌进入容器麻烦的话,直接在宿主机跑这条命令就能得到结果:
docker exec -i postgres_for_corda psql -U postgres -c "SELECT usename FROM pg_user;"
输出里能看到party_a,就代表创建没问题。
二、创建失败后的处理步骤
要是验证后发现用户没创建成功,按这几步排查就行:
- 检查
party_a.sql文件内容
先确认SQL语句格式正确,比如创建用户的语句应该是这样的:
CREATE USER party_a WITH PASSWORD '你的密码'; -- 如果需要给用户数据库权限,再加这句 GRANT ALL PRIVILEGES ON DATABASE 你的Corda数据库名 TO party_a;
语法错了的话,执行肯定会失败。
- 确认容器运行状态
先看看容器是不是在正常运行:
docker ps | grep postgres_for_corda
如果容器没启动,先把它拉起来:
docker start postgres_for_corda
- 查看容器日志找报错原因
执行这条命令看容器日志,里面会明确告诉你哪里出问题了:
docker logs postgres_for_corda
比如权限不足、语句错误这类问题,日志里都会有提示。
- 修正后重新执行创建命令
排查完问题,再重新跑你之前的创建命令:
cat party_a.sql | docker exec -i postgres_for_corda psql -h localhost -p 5432 -U postgres
要是之前已经试过创建,可能会提示用户已存在,这时候可以在party_a.sql开头加一句删除旧用户的语句:
DROP USER IF EXISTS party_a;
再重新执行命令就好。
- 简化命令避免网络问题
其实在容器内部执行psql时,不需要指定-h localhost(因为是连接容器内的PostgreSQL服务),可以把命令简化成这样试试:
cat party_a.sql | docker exec -i postgres_for_corda psql -U postgres
有时候指定-h反而会因为容器内网络配置出问题。
内容的提问来源于stack exchange,提问作者Arijit Mahapatra




