我可以在 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);
我正在执行 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);