Postgresql 我可以在psql函数体中使用控制台输入属性值吗
我正在执行SQL脚本,如: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
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文件中去掉引号。