【问题标题】:Errors while passing parameters into a psql command将参数传递到 psql 命令时出错
【发布时间】:2017-08-29 00:34:19
【问题描述】:

我正在尝试连接到 Redshift 集群并运行带参数的 SQL 脚本,但出现错误。

这是 Bash 命令:

psql -v schema="$REDSHIFT_SCHEMA" -h "$REDSHIFT_HOSTNAME" -d "$REDSHIFT_DATABASE" -U "$REDSHIFT_USERNAME" -p "$REDSHIFT_PORT" -f "nulltest.sql" -v inputStartDateId=20170318 -v inputEndDateId=20170404

nulltest.sql的内容是:

select 
    COALESCE( $inputStartDateId, min(StartDateID)),
    COALESCE( $inputEndDateId, max(EndDateID))
from (
    select 
        row_number()over(order by FiscalWeekID desc) as rownum,
        FiscalWeekID,
        min(dateid)StartDateID
        ,max(dateid)EndDateID 
    from 
        dm.dim_Time
    where DateKey < getdate()
    group by FiscalWeekID
    ) a
where rownum <= 3

我得到的错误是:

psql:nulltest.sql:15: ERROR:  syntax error at or near "$"
LINE 2:  COALESCE( $inputStartDateId, max(StartDateID))

我是否在 SQL 脚本中错误地调用了参数?当我在运行时将值传递给参数时,SQL 通过 Aginity 运行得非常好。我不确定通过psql 命令调用 SQL 时应该有什么不同

【问题讨论】:

  • 顶部的最小值/最大值和内部的有什么区别?
  • 您是在传递日期以创建日期范围还是其他内容
  • 内层帮助定义和查找 StarDateID 和 EndDateID。我正在传递参数,因为有时我必须手动设置日期

标签: sql bash amazon-redshift psql


【解决方案1】:

您在命令行上正确传递了参数,但您的 nulltest.sql 文件应使用 :inputStartDateId:'inputStartDateId' 而不是 $inputStartDateId。上一个答案:https://stackoverflow.com/a/30850125/6650678

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 2014-06-13
    • 2017-07-12
    • 1970-01-01
    • 2020-10-15
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多