sql - PostgreSQL 中不需要的换行符翻译

标签 sql database postgresql newline

在 PostgreSQL 中,我有许多 View ,其中某处包含以下 SQL:

select replace(
  replace(details, E'\n\n', '</text></line><line><text>'||E'\n'),
  E'\n', '</text></line><line><text>'||E'\n')
from personal_details

这用于将数据中的换行符替换为 </text></line><line><text>这样我就可以得到我想要的格式的输出,但实际上既不存在也不存在。

问题:

当我将此 SQL(通过 PhpPgAdmin)添加到 View 的定义中并保存它时,Postgresql 似乎翻译了换行符,因此 View 定义现在看起来像这样:

select replace(
      replace(details, '

'::text, '</text></line><line><text>'::text || '
'::text), '
'::text, '</text></line><line><text>'::text || '
'::text))
from personal_details

如您所见,它正在翻译 E'\n\n'我不希望它这样做,因为它使 View 定义更难理解,如果有人第一次看到翻译后的 SQL(例如,如果他们想对 View 进行更改),他们可能不明白与我最初作为 View 定义输入的 SQL 相比, View 正在执行。

我可能忽略了一个明显的解决方案?但我该如何防止它这样做,这会对我的 View 产生任何不利影响吗?

最佳答案

恐怕答案可能是“不”。

E'...' 形式只是另一种字符串文字表示形式,因此它不会保留在存储值中。

现在,您可以很好地论证 PostgreSQL 中的字符串表示代码应该扫描每个字符串并查找可能的转义字符。然后它可以改为显示 PostgreSQL 特定的转义格式。我在 todo list 上看不到任何提及的内容因此可能值得在其中一个 PostgreSQL 邮件列表中提出这个问题(也许从普通人而不是黑客开始),看看人们对这样的改变会有什么感受。

关于sql - PostgreSQL 中不需要的换行符翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190332/

相关文章:

sql - 如何从具有不同 where 子句的表中两次获得 sum() ?

php - 附加 where 子句

mysql - 将创建时间,修改时间列添加到mysql中的现有表

java - 有没有一种方法可以使用嵌入式数据库来测试 Postgres Jsonb 查询以进行单元测试?

postgresql - 即使扩展名已经存在,dblink 也不存在?

sql - 在其中一个连接上选择具有最大值的记录

c# - Linq 中的左修剪

sql-server - 如何对 SQL Server 查询进行基准测试?

php - 如何使用 php laravel 调整列中的句子

postgresql postgis 如果点在圆内