将记录转换为带有自定义分隔符的字符串

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

我可以通过执行 myrecord::text 将记录转换为字符串。我的问题是我的记录具有包含逗号的文本字段,并且生成的类型转换文本以逗号分隔。因此,我无法以良好的方式分离生成的文本。

解决方案是将记录转换为文本时定义自定义分隔符(例如制表符或分号)。我怎样才能实现这个目标?

谷歌搜索给了我答案,比如使用函数 string_agg、unnest、array_to_string 等。我的安装中不存在这些函数(我在 Windows 机器上使用 PostgreSQL 版本 12.4)。

replace(myrecord::text, ',', ' ') 将制表符放入应包含逗号的文本字段中。

示例代码:

DECLARE
myrecord RECORD;
BEGIN
FOR myrecord IN
SELECT * FROM mytable
LOOP
RAISE INFO '%',replace(myrecord::text, ',', '\t');
END LOOP;
END;
postgresql replace casting delimiter record
2个回答
1
投票

如果您需要表格内容的制表符分隔输出,您可以使用

COPY
:

COPY mytable TO '/dir/outfile' (FORMAT 'csv', DELIMITER E'\t');

0
投票

我认为,@LaurenzAlbe 给出的答案完全满足您的任务。
为了感兴趣,我将提供另一个无需中间表即可直接转换复制的示例。
另请参阅此

COPY (select string_agg(value,';' order by ordinality)
      from
        (select test_table.id,t.*
         from test, lateral jsonb_each_text(to_jsonb(test_table)) with ordinality as t
         where ....
        )x
      group by id
      order by id)
TO '/dir/outfile' (FORMAT 'csv', DELIMITER E'\t');;
© www.soinside.com 2019 - 2024. All rights reserved.