我可以在 psql 函数体中使用控制台输入 属性 值吗

May I use console input property value in psql function body

我正在执行 SQL 个脚本,例如:

psql -h localhost -p 5432 -U postgres --set=user_app=myservice_app --set=user_app_pswd=asdf1234 -f ../sql/create-app-user.sql

create-app-user.sql 脚本所在的位置:

DO
$body$
BEGIN
  IF NOT EXISTS(
      SELECT *
      FROM pg_catalog.pg_user
      WHERE usename = ':user_app')
  THEN

    CREATE USER ":user_app" WITH PASSWORD ':user_app_pswd';
  END IF;
END
$body$;

除了 CREATE USER ":user_app" 部分外,一切正常,因为双引号直接解释字符串。我不能使用像 CREATE USER ':user_app' 这样的单引号,因为它会抛出 syntax error at or near "':user_app'"。完全不使用引号会导致相同的错误。

转义也无济于事。所以,我想知道如何使用带双引号的 属性 值?或者任何其他带有变量的解决方案?

使用动态SQL

EXECUTE 'CREATE USER ' || quote_ident(:user_app)
           || ' WITH PASSWORD ' || quote_literal(:user_app_pswd);