【发布时间】:2022-11-13 11:50:24
【问题描述】:
背景
目的是在启动时创建数据库和用户(如果它们不存在)。使用此处描述的 bash 解决方法:Simulate CREATE DATABASE IF NOT EXISTS for PostgreSQL?
引号似乎有问题。我尝试了许多建议,但没有一个解决它。有任何想法吗?
这有效:
echo "SELECT 'CREATE USER myuser' WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'myuser')\gexec" | psql -h myhost -U admin -d mydb
但是在设置密码时由于(我认为)引用错误而失败:
echo "SELECT 'CREATE USER myuser' WITH PASSWORD 'mypassword' WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'myuser')\gexec" | psql -h myhost -U admin -d mydb
错误信息:
ERROR: syntax error at or near "WITH"
LINE 1: SELECT 'CREATE USER myuser' WITH PASSWORD 'mypassword' WHERE..
【问题讨论】:
-
您没有发布收到的错误消息。
-
我已将错误添加到描述中。
-
尝试从 SQL 命令中删除
\gexec。 -
@Niloct 同样的问题。似乎是传递报价的问题。
-
\gexec有点复杂,它使SELECT命令输出的任何文本都用作新的 SQL 查询,但也许您可以在没有此功能的情况下执行上述命令。
标签: linux postgresql bash