如何在 Postgresql 命令中转义引号?

如何在 Postgresql 命令中转义引号?

我正在编写一个脚本,该脚本使用来自源文件的变量输入创建一个 Postgres 用户。以用户“root”身份运行以下脚本:

su - postgres <<'EOF'
. /var.src
psql
CREATE ROLE john;
ALTER USER john WITH PASSWORD '$JOHNPASSWORD';
ALTER ROLE john WITH LOGIN;
CREATE DATABASE john;
ALTER DATABASE john OWNER TO john;
\q
EOF

我正在创建用户 john 和数据库 john,但 john 的密码在 var.src 中。我查看的所有地方都显示类似这样的命令:

sudo -u postgres psql -c "ALTER USER john WITH PASSWORD '$JOHNPASSWORD';"

我认为用 $JOHNPASSWORD 替换密码需要转义。我尝试过用反斜杠、双引号等转义单引号。没有用。我还没能找到如何转义单引号,以便它可以从 var.src 读取变量。

也许这与我整个处理这个问题的方式有关?

答案1

我找到了一些有用的东西。我在脚本跳出 EOF 后提供了密码更改命令。以下是对我有用的方法:

    su - postgres <<'EOF'
    . /var.src
    psql
    CREATE ROLE john;
    ALTER ROLE john WITH LOGIN;
    CREATE DATABASE john;
    ALTER DATABASE john OWNER TO john;
    \q
    EOF

    . /var.src
    sudo -u postgres psql -c "ALTER USER john WITH PASSWORD '$JOHNPASSWORD';"

这是因为我在 EOF 之后再次调用了变量文件。我确信这与我之前假设的转义引号有关。但这也有效。

相关内容