使用\ copy时Postgres变量替换

时间:2013-02-04 16:31:20

标签: bash postgresql variables

我正在使用psql命令\ copy,我想从shell(对于表名)传递一个变量,就像我在编写脚本时所做的那样。我在文档中读到:

  

该命令的语法类似于SQL COPY命令的语法。请注意,因此,特殊的解析规则适用于\ copy命令。特别是,变量替换规则和反斜杠转义不适用。

这似乎很明确,但是我想知道是否有人知道一个工作区?

2 个答案:

答案 0 :(得分:3)

您可以使用heredoc语法进行shell变量替换。例如:

#!/bin/sh
tablename=foo
psql -d test <<EOF
\copy $tablename FROM '/path/to/file'
EOF

答案 1 :(得分:0)

您可以使用 -v psql_var="$shell_var" 命令行参数将变量从 shell 传递到 psql(或在导出后直接使用 shell 转义 `echo "$shell_var"` 访问它)。然后,您可以在另一个元命令中构建 \copy 元命令(本地使用 \set 或服务器端使用 \gset)。示例:

#!/bin/sh
tablename=foo
psql -d test -v tbl="$tablename" <<\EOF
\set cmd '\\copy ' :tbl ' FROM ''/path/to/file'''
\echo :cmd
:cmd
EOF