Heroku PSQL передает динамический параметр в файл SQL - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь выполнить файл .sql в Heroku PSQL и хочу передать динамические значения параметров в файл .sql.

Ниже приведен скрипт, который я использую

heroku pg:psql --app application_name <./somepath/file_to_execute.sql --param1="'$File_name'" --param2="'$Tag_id'" --param3="'$job_name'" --param4="$id"

Файл sql содержит скрипт вставки:

INSERT INTO version_table (col1, col2, col3, col4) 
VALUES (:param1,:param2,:param3,:param4);

Я получаю сообщение об ошибке от Heroku:

Ошибка: неожиданные аргументы: --param2 = '1.1.1', --param3 = 'имя-теста', --param4 = 12

Как выполнить этот файл sql с динамическим значением в Heroku PSQL

Я также пробовал запрос ниже:

heroku pg:psql --app application_name <./somepath/file_to_execute.sql --v param1="'$File_name'" --v param2="'$Tag_id'" --v param3="'$job_name'" --v param4="$id"

Получено сообщение об ошибке:

Ошибка: неожиданные аргументы: param1 = 'file_name.sql', --v, param2 = '1.1.1', --v, param3= 'имя-теста', --v, param4 = 12

1 Ответ

0 голосов
/ 10 июля 2019

Вы можете получить URL-адрес базы данных с помощью следующей команды heroku:

$ heroku pg:credentials:url --app application_name

Это напечатает что-то вроде:

Connection information for default credential.
Connection info string:
   "dbname=xyz host=something.compute.amazonaws.com port=1234 user=foobar password=p422w0rd sslmode=require"
Connection URL:
   postgres://foobar:p422w0rd@something.compute.amazonaws.com:1234/xyz

URL (последняя строка) можетиспользоваться напрямую с psql.С помощью grep мы можем получить эту строку и передать ее psql:

$ psql $(heroku pg:credentials:url --app application_name | grep 'postgres://') \
    < ./somepath/file_to_execute.sql \
    -v param1="$File_name" \
    -v param2="$Tag_id" \
    -v param3="$job_name" \
    -v param4="$id"

Обратите внимание, что вместо ввода одинарных кавычек в параметр в командной строке, вы должны получить доступ к параметру в SQL как :'param1'.

...