2

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

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

这似乎很确定,但是我想知道是否有人知道工作方法?

4

2 回答 2

3

您可以使用带有 heredoc 语法的 shell 变量替换。例子:

#!/bin/sh
tablename=foo
psql -d test <<EOF
\copy $tablename FROM '/path/to/file'
EOF
于 2013-02-04T16:48:08.553 回答
0

您可以使用命令行参数将变量从 shell 传递给 psql (或在导出后-v psql_var="$shell_var"直接使用 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
于 2021-05-21T18:47:11.700 回答