非交互式 postgres 命令在 Ubuntu 机器中挂起
Non-interactive postgres command hangs in Ubuntu machine
我正在使用以下摘录创建一个 CircleCI 配置文件:
executors:
ubuntu:
machine:
image: ubuntu-2004:202107-02
jobs:
build:
executor: ubuntu
environment:
PGUSER: postgres
DATABASE_URL: postgresql://postgres@localhost:5432/postgres
TERM: xterm
steps:
- checkout
- run: sudo apt-get update
- run: sudo apt-get install postgresql
- run: psql -V
- run: pg_isready
- run: |
psql \
-d $DATABASE_URL \
-c "CREATE TABLE test (name char(25));"
- run: |
psql \
-d $DATABASE_URL \
-c "INSERT INTO test VALUES ('John'), ('Joanna'), ('Jennifer');"
- run: |
psql \
-d $DATABASE_URL \
-c "SELECT * from test;"
pg_isready
之前的所有命令(包括 pg_isready
)都会无错退出,但无论我尝试什么,下一个命令 (CREATE TABLE) 都会挂起。 CircleCI 日志显示此内容,没有进一步的输出:
#!/bin/bash -eo pipefail
psql \
-d $DATABASE_URL \
-c "CREATE TABLE test (name char(25));"
我使用的代码取自 CircleCI 的文档并稍作修改:
https://circleci.com/docs/2.0/databases/
这种类型的工作对我来说是新的 – 我希望这是一个明显缺失的命令 – 在此先感谢!
发布我的答案以防其他人遇到此问题:我的具体问题是 psql 一直进入交互模式。这发生在任何 psql 命令上——而不仅仅是密码请求。这阻止了进程退出并继续下一个进程。
通过将我的命令传递给 cat,我能够解决 CircleCI 的问题。例如:
- run:
name: Create test database
command: sudo -u postgres createdb testdb | cat
此外,关闭页面选项也可以,但看起来更冗长:psql -P pager=off
如果您发现更好的方法,请添加到本主题! (我尝试了环境变量,但无法让它们坚持下去。)
我正在使用以下摘录创建一个 CircleCI 配置文件:
executors:
ubuntu:
machine:
image: ubuntu-2004:202107-02
jobs:
build:
executor: ubuntu
environment:
PGUSER: postgres
DATABASE_URL: postgresql://postgres@localhost:5432/postgres
TERM: xterm
steps:
- checkout
- run: sudo apt-get update
- run: sudo apt-get install postgresql
- run: psql -V
- run: pg_isready
- run: |
psql \
-d $DATABASE_URL \
-c "CREATE TABLE test (name char(25));"
- run: |
psql \
-d $DATABASE_URL \
-c "INSERT INTO test VALUES ('John'), ('Joanna'), ('Jennifer');"
- run: |
psql \
-d $DATABASE_URL \
-c "SELECT * from test;"
pg_isready
之前的所有命令(包括 pg_isready
)都会无错退出,但无论我尝试什么,下一个命令 (CREATE TABLE) 都会挂起。 CircleCI 日志显示此内容,没有进一步的输出:
#!/bin/bash -eo pipefail
psql \
-d $DATABASE_URL \
-c "CREATE TABLE test (name char(25));"
我使用的代码取自 CircleCI 的文档并稍作修改: https://circleci.com/docs/2.0/databases/
这种类型的工作对我来说是新的 – 我希望这是一个明显缺失的命令 – 在此先感谢!
发布我的答案以防其他人遇到此问题:我的具体问题是 psql 一直进入交互模式。这发生在任何 psql 命令上——而不仅仅是密码请求。这阻止了进程退出并继续下一个进程。
通过将我的命令传递给 cat,我能够解决 CircleCI 的问题。例如:
- run:
name: Create test database
command: sudo -u postgres createdb testdb | cat
此外,关闭页面选项也可以,但看起来更冗长:psql -P pager=off
如果您发现更好的方法,请添加到本主题! (我尝试了环境变量,但无法让它们坚持下去。)