PSQL \copy from a bash script with QUOTE

PSQL \copy from a bash script with QUOTE

我正在尝试使用 bash 脚本将数据插入到 Postgres 数据库的某些表中。我是这样工作的

 psql -c '\copy raw.ap1_1 from file.csv with csv header;'

问题是我不想给复制命令 Quote 选项,但由于外面的引号,我无法让它工作。我尝试过将单引号括在双引号中,将双引号括在单引号中,使用反斜杠转义引号等。

想要的是这样的:

psql -c '\copy raw.ap1_1 from file.csv with csv header quote as '"';'

但是我当然不能那样做,因为引号是 bash 脚本的一部分。我得到一个 postgres 语法错误,或者我得到一个解析 EOF 错误(因为引号覆盖了它们自己)。

PostgreSQL 的 SQL 提供了另一种引用方法,称为美元引用。这可能是最简单的方法。

psql -c '\copy raw.ap1_1 from file.csv with csv header quote as $$"$$'

请注意,在 shell 单引号内,美元符号和双引号都不是特殊符号。另请注意 \copy 不以 ; 结尾。进一步注意,指定与默认值相同的引号字符似乎有点愚蠢。

如果您不想使用美元报价,您可以在 shell 级别正确转义。你不能在 shell 的单引号内这样做,所以首先你必须关闭引号,然后打印 '"' 每个用反斜杠转义的引号。 (如果这不是该行的结尾,您将重新打开 shell 的单引号以结束该行。)

    psql -c '\copy raw.ap1_1 from file.csv with csv header quote as '\'\"\'

这应该有效:

psql -c "\copy raw.ap1_1 from file.csv (format 'csv', header, quote '\"')"

首先,您将登录。那么

Copy table_name from 'C:\\expdata_202111122321.csv' with delimiter ';' csv header encoding 'windows-1254';