我正在尝试accounts_db
在 CI(GitLab CI,如果相关)中创建一个 PostgreSQL 数据库,但前提是该数据库尚不存在。由于本机 Postgres 不支持,我目前通过使用 psql 运行 a SELECT
on来解决它pg_database
,并且只有当它不返回结果时,我才再次使用 psql 运行 a CREATE DATABASE
:
psql -tc "SELECT 1 FROM pg_database WHERE datname = 'accounts_db';" | grep -q 1 || psql -c "CREATE DATABASE accounts_db;"
这在大多数情况下都有效:accounts_db
已经存在,因此grep
成功退出并且CREATE DATABASE
不执行。
不过,大多数时候并非总是如此。出于某种原因,它有时会出现在 的第二部分||
,只是因为数据库已经存在而出错:
$ psql -tc "SELECT 1 FROM pg_database WHERE datname = 'accounts_db';" | grep -q 1 || psql -c "CREATE DATABASE accounts_db;"
ERROR: database "accounts_db" already exists
这怎么可能?