Ubuntu机器中CircleCI流程下非交互式Postgres命令挂起求助
问题根因
你遇到的挂起是psql等待密码输入导致的:pg_isready仅检测PostgreSQL端口是否处于可连接状态,不需要完成身份校验,所以可以正常退出。而你执行SQL命令时需要完成登录验证,Ubuntu默认安装的PostgreSQL对本地TCP连接(你配置的localhost连接走TCP协议)启用了密码验证规则,你没有配置密码相关参数,psql会卡在无回显的密码输入步骤,看起来就是挂起无输出。
可行解决方案(二选一即可)
方案1:使用系统用户身份认证(无需修改配置,更简单)
PostgreSQL默认支持peer身份认证:与PostgreSQL内同名的系统用户可以直接免密登录。你只需要在执行psql命令时切换到postgres系统用户即可,调整后的步骤参考:
- run: | sudo -u postgres psql \ -c "CREATE TABLE test (name char(25));" - run: | sudo -u postgres psql \ -c "INSERT INTO test VALUES ('John'), ('Joanna'), ('Jennifer');" - run: | sudo -u postgres psql \ -c "SELECT * from test;"
如果要保留DATABASE_URL的配置,也可以只在原有psql命令前加sudo -u postgres即可。
方案2:修改认证规则允许免密登录
如果你要保持原有命令格式不变,可以在安装PostgreSQL后新增两步配置,放开本地连接的认证限制:
- run: sudo apt-get install postgresql # 新增以下两行配置 - run: sudo sed -i 's/host all all 127.0.0.1\/32 scram-sha-256/host all all 127.0.0.1\/32 trust/' /etc/postgresql/12/main/pg_hba.conf - run: sudo systemctl restart postgresql # 原有后续步骤保持不变 - run: psql -V - run: pg_isready
内容的提问来源于stack exchange,提问作者calipoop
相关产品推荐
相关产品推荐

