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

Postgresql 我可以在psql函数体中使用控制台输入属性值吗,postgresql,psql,Postgresql,Psql,我正在执行SQL脚本,如: psql -h localhost -p 5432 -U postgres --set=user_app=myservice_app --set=user_app_pswd=asdf1234 -f ../sql/create-app-user.sql 其中创建应用程序user.sql脚本为: DO $body$ BEGIN IF NOT EXISTS( SELECT * FROM pg_catalog.pg_user WHER

我正在执行SQL脚本,如:

psql -h localhost -p 5432 -U postgres --set=user_app=myservice_app --set=user_app_pswd=asdf1234 -f ../sql/create-app-user.sql
其中
创建应用程序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\u app”
部分外,其他部分都可以正常工作,因为双引号直接解释字符串。我不能使用像
CREATE USER':USER\u-app'
这样的单引号,因为它在“':USER\u-app'”处或附近抛出
语法错误。完全不使用引号会导致相同的错误

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

使用动态SQL

EXECUTE 'CREATE USER ' || quote_ident(:user_app)
           || ' WITH PASSWORD ' || quote_literal(:user_app_pswd);
您是否尝试过--set=user\u app='myservice\u app'并在sql文件中去掉引号。