【问题标题】:psql variables in included scripts包含脚本中的 psql 变量
【发布时间】:2013-11-19 17:56:27
【问题描述】:

更新:此特定问题与 psql 包含的脚本无关。包含的脚本中的变量按预期进行插值。实际问题是由于在 SQL 函数定义中的 $$ 引号内使用 psql 变量导致的,并且是 described in this question

我正在使用 psql 变量在相当长的 SQL 脚本中从命令行设置一些参数(表名、值)。脚本变得太长了,我将它分成几个部分,并使用\ir subscript.sql 语法将它们包含在主脚本中。但是,主脚本中的变量不会传递给下标。这很奇怪,因为文档说\i file 相当于在键盘上键入文件,即应该保留脚本环境。

有没有一种简单的方法可以将变量传递给 psql 中包含的脚本?

我使用的是 psql 版本 9.3.1。

【问题讨论】:

  • 您所描述的应该可以正常工作。你能展示一个可重现的例子吗?
  • 糟糕!我试图创建一个可重现的示例,并意识到问题实际上是变量没有插入到 SQL 函数定义中的 $$ 引号内。在包含的脚本中,psql 变量被正确插入。

标签: postgresql scripting psql postgresql-9.3


【解决方案1】:

看看--variable=http://www.postgresql.org/docs/current/static/app-psql.html

例如。

psql -d somedb -U someuser -f yourscript.sql --variable=Foo=foobar

在您的脚本中,您可以:

UPDATE sometable SET somecol = :Foo;

【讨论】:

  • with --variable=Foo=foobar :Foo 将在 yourscript.sql 中可见,但是如果我使用 \i another.sql 从 yourscript.sql 调用任何其他脚本,则 :Foo 不会在 another.sql 中可见
  • 啊,我在原始问题中忽略了这一点。我想你可以通过使用脚本语言来创建脚本来解决这个问题,例如。 Bash,并将其传递到子脚本中。
  • 我试图创建一个可重现的示例,并意识到问题实际上是变量没有插入到 SQL 函数定义中的 $$ 引号内。在包含的脚本中,psql 变量被正确插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2013-09-14
  • 1970-01-01
  • 2013-07-05
  • 2013-11-15
相关资源
最近更新 更多