在Postgresql中使用带变量的转义字母

在Postgresql中使用带变量的转义字母,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我正在使用触发器更新记录 我试过了 CREATE OR REPLACE FUNCTION fn_trg_sales2() RETURNS trigger AS $BODY$ declare xNarr text=''; select name into xNarr from t1 where id =1; update t2 set narration =E narration || case when narration ='' then xNarr else '\n'

我正在使用触发器更新记录

我试过了

CREATE OR REPLACE FUNCTION fn_trg_sales2()
  RETURNS trigger AS
$BODY$  declare

 xNarr text='';

 select name into xNarr from t1 where id =1;

 update t2 set narration =E narration || case when narration ='' then  xNarr else 
'\n' || xNarr end where id=1

return null;
 end; 
 $BODY$
上面的程序显示错误

如何使用变量在此更新查询中使用转义字符? 如何将转义字符与变量一起使用?。不要建议使用转义字符来表示out变量

我正在使用postgresql 9.1

编辑

我从某个命令中获取信息,所以我在触发器中像这样更新

update t2 set narration =narration || case when narration ='' then  xNarr else 
    quote_literal('\n') || xNarr end where id=1
现在它在表中显示为两行,但其结尾和开头为'

如何在不使用单个qotation的情况下进行存储?

如中所述,包含带反斜杠的转义序列的字符串必须以
E
开头,如
E'line1\nline2'
E'\n'
仅用于换行

E
语法自PostgreSQL 9.1在其默认配置中关于
标准一致性字符串
以来已成为强制性的,正如文档中在同一位置警告的那样:

如果配置参数标准\u符合\u字符串为off, 然后,PostgreSQL识别正则和正则表达式中的反斜杠转义 转义字符串常量。但是,从PostgreSQL 9.1开始,默认值为 启用,意味着反斜杠转义只能在转义中识别 字符串常量。
此行为更符合标准,但可能会中断 依赖于历史行为的应用程序,其中反斜杠 逃跑总是被认出的

quote\u literal
函数用于在将SQL语句输入SQL解释器之前以编程方式构建SQL语句,这就是其结果包含单引号的原因。此函数不是必需的,对您的用例没有帮助

narration

 this is first'
 'this is second