如何在PostgreSQL COPY语句中保留换行符?
解决PostgreSQL COPY导出保留换行符的问题
问题出在你用%L格式化_page.content时,PostgreSQL会自动转义字符串里的特殊字符(包括换行、回车符),把实际的换行转换成明文的\r\n,导致导出文件不符合预期。
你可以改用参数化查询的方式,通过USING子句传递_page.content的值,避免转义处理:
LOOP EXECUTE FORMAT('COPY (SELECT $1) TO %L', _directory || '/pages/' || _page.id || '.md') USING _page.content; END LOOP;
修改后,COPY会直接读取_page.content的原始值,保留其中的换行符,导出的Markdown文件就能得到你期望的格式。
如果你的content列存储的是带\r(回车符)的Windows风格换行,导出后在类Unix系统下可能会显示多余的^M符号,这种情况可以先去掉回车符再导出:
LOOP EXECUTE FORMAT('COPY (SELECT $1) TO %L', _directory || '/pages/' || _page.id || '.md') USING replace(_page.content, E'\r', ''); END LOOP;
内容的提问来源于stack exchange,提问作者user23968581
相关产品推荐
相关产品推荐

