2017-01-30 5 views
0

Я выполнение сценариев SQL, как:Могу ли я использовать консольное значение входного свойства в функции PSQL тела

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'". Использование котировок вообще не приводит к той же ошибке.

Эскапинг также не помогает. Итак, мне интересно, как использовать значение свойства с двойными кавычками? Или любое другое решение с переменными может быть?

+0

ли вы попробовать --set = user_app = 'myservice_app' и оставь кавычки в SQL-файл. –

ответ

1

Использование динамического SQL

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

 Смежные вопросы

  • Нет связанных вопросов^_^