首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres将“文本”替换为“文本”

Postgres将“文本”替换为“文本”
EN

Stack Overflow用户
提问于 2022-03-09 01:50:50
回答 2查看 213关注 0票数 0

我插入了一堆带有文本字段(如content='...\n...\n...' )的行。

我没有在前面使用e,比如conent=e'...\n...\n...,所以现在\n实际上不是以换行符的形式显示的,而是以文本的形式打印出来的。

如何解决这个问题,即如何将每行的内容字段从'...'更改为e'...'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-09 02:43:39

语法变量E'string'使Postgres将给定的字符串解释为Posix转义字符串。\n编码换行符只是许多解释转义序列中的一个(即使是最常见的)。请参见:

要“重新评估”Posix转义字符串,可以使用一个带有动态SQL的简单函数,如下所示:

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION f_eval_posix_escapes(INOUT _string text)
  LANGUAGE plpgsql AS
$func$
BEGIN
   EXECUTE 'SELECT E''' || _string || ''''  INTO _string;
END
$func$;

警告1:,这本质上是不安全的!我们必须动态地计算输入字符串,而不需要引用和转义,这允许SQL注入。只在安全的环境中使用。

警告2:不重复应用。否则,它将错误地使用真正的\字符来解释实际字符串,等等。

警告3:这个简单的函数是不完美的,因为它不能正确地处理嵌套单引号。如果你有其中的一些,考虑一下:

适用范围:

代码语言:javascript
复制
UPDATE tbl
SET    content = f_eval_posix_escapes(content)
WHERE  content IS DISTINCT FROM f_eval_posix_escapes(content);

db<>fiddle https://dbfiddle.uk/?rdbms=postgres_14&fiddle=6477ccaf1fddacd6d12b68f90db23edf

注意添加的WHERE子句可以跳过不会更改任何内容的更新。请参见:

票数 2
EN

Stack Overflow用户

发布于 2022-03-09 01:55:24

在更新查询中使用替换。类似这样的东西:(我在移动,所以请忽略任何错误或语法错误)

代码语言:javascript
复制
UPDATE table
SET 
column = REPLACE(column, '\n', e'\n')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71403453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档