Postgresql 包含脚本中的psql变量

Postgresql 包含脚本中的psql变量,postgresql,scripting,psql,postgresql-9.3,Postgresql,Scripting,Psql,Postgresql 9.3,更新:此特定问题与包含psql的脚本无关。所包含脚本中的变量按预期进行插值。实际问题是由于在SQL函数定义中的$$引号内使用psql变量而导致的,并且是 我使用psql变量在一个相当长的SQL脚本中从命令行设置一些参数(表名、值)。脚本太长了,我将它分成几个部分,并使用\ir subscript.sql语法将它们包含在主脚本中。但是,主脚本中的变量不会传递给子脚本。这很奇怪,因为文档中说\i file相当于在键盘上键入file,也就是说,应该保留脚本环境 有没有简单的方法将变量传递给psql中包

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

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

有没有简单的方法将变量传递给psql中包含的脚本

我使用的是psql 9.3.1版。

请看一下

例如

在脚本中,您可以有:

UPDATE sometable SET somecol = :Foo;

使用--variable=Foo=foobar:Foo将在yourscript.sql中可见,但是如果我使用
\I other.sql调用yourscript.sql中的任何其他脚本,那么:Foo将在另一个脚本中不可见。sqlAh,我在最初的问题中就忽略了这一点。我想您可以通过使用脚本语言来创建脚本(例如Bash)来解决这个问题,并将其传递到子脚本中。我尝试创建一个可复制的示例,并意识到问题实际上在于SQL函数定义中的$$引号内没有插入变量。在包含的脚本中,psql变量被正确插入。您所描述的应该可以正常工作。你能展示一个可复制的例子吗?哎呀!我试图创建一个可复制的示例,并意识到问题实际上是在SQL函数定义中变量没有插入$$引号内。在包含的脚本中,psql变量被正确插值。
UPDATE sometable SET somecol = :Foo;