psql 如何复制列之间具有单个空格的查询输出

问题描述 投票:0回答:1

我想从表创建更新命令(使用

select
查询),如下所示:

SELECT 'UPDATE table1 SET col=', col, 'WHERE id=', id, ';' FROM table1;

我想用

COPY
将此查询输出到标准输出。我正在这样做:

COPY (SELECT 'UPDATE table1 SET col=', col, 'WHERE id=', id FROM table1) TO STDOUT DELIMITER ' ';

问题是,这输出的是由

\ 
分隔的列,而不仅仅是空格:

UPDATE\ table1\ SET\ col=23 WHERE\ id= 345;

如何只输出中间有单个空格的列。

sql postgresql psql dump
1个回答
0
投票

使用 SQL 查询生成 SQL 的惯用方法是通过

format
函数,在单列中生成查询,如下所示:

SELECT format('UPDATE table1 SET col=%s WHERE id=%s;'
              ,col, id) FROM table1;

可以使用格式说明符

%L
代替
%s
来正确引用文字,以避免 SQL 注入(或
%I
用于表名或列名等标识符)。

查询在单个列中,您不会遇到列之间分隔符的问题。

话虽这么说,但不清楚为什么在 COPY 中使用

DELIMITER ' '
时会在空格前看到反斜杠,因为 COPY 本身不会这样做。示例:

COPY (select 'ab', 'cd') TO STDOUT delimiter ' ';

结果:

ab cd
© www.soinside.com 2019 - 2024. All rights reserved.