Postgresql - 不需要的换行符翻译

时间:2013-11-25 10:53:30

标签: sql database postgresql newline

我有一个问题,我希望有人能够提供帮助...

在Postgresql中,我有许多视图,其中包含以下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 Definition现在看起来像这样:

select replace(
      replace(details, '

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

正如您所看到的那样,它正在翻译我不希望它执行的E'\n\n',因为它使查看定义更难以理解,并且如果有人第一次看到翻译的SQL(如果他们想要的话)为了对View进行更改,例如,与我最初作为视图定义输入的SQL相比,他们可能无法理解View正在做什么。

我可能会忽略一个明显的解决方案?但是我如何阻止它这样做?这会对我的观点产生任何不利影响吗?

1 个答案:

答案 0 :(得分:1)

我担心答案可能是“不”。

E'...'表单只是一个替代字符串 - 文字表示,因此它不会保留在存储的值中。

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