我想从表创建更新命令(使用
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;
如何只输出中间有单个空格的列。
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