我正在使用psql命令\ copy,我想从shell(对于表名)传递一个变量,就像我在编写脚本时所做的那样。我在文档中读到:
该命令的语法类似于SQL COPY命令的语法。请注意,因此,特殊的解析规则适用于\ copy命令。特别是,变量替换规则和反斜杠转义不适用。
这似乎很明确,但是我想知道是否有人知道一个工作区?
答案 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