Heroku PSQL 将动态参数传递给 SQL 文件

Heroku PSQL pass dynamic parameter to SQL file

我正在尝试在 Heroku PSQL 中执行一个 .sql 文件,并想在 .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 收到以下错误消息:

Error: Unexpected arguments: --param2='1.1.1', --param3='test-name', --param4=12

如何在 Heroku PSQL 中使用动态值执行此 sql 文件

我也试过以下查询:

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"

收到以下错误消息:

Error: Unexpected arguments: param1='file_name.sql', --v, param2='1.1.1', --v, param3='test-name', --v, param4=12

您可以使用以下 heroku 命令将 URL 获取到数据库:

$ 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"

请注意,不要将单引号放在命令行的参数中,您应该以 :'param1'.

的形式访问 SQL 中的参数