Postgres 文档声明:
虽然指定字符串常量的标准语法通常很方便,但当所需字符串包含许多单引号或反斜杠时,可能很难理解,因为每个单引号或反斜杠都必须加倍。
我了解单引号是如何加倍的,因为这是根据第 4.1.2.1 节关于字符串常量的内容对它们进行转义的方式。但是如果反斜杠加倍,那么这肯定是不可能的:
janus=> \d todo
Table "public.todo"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+----------------------------------
id | integer | | not null | nextval('todo_id_seq'::regclass)
descr | text | | |
done | boolean | | |
janus=> truncate table todo;
TRUNCATE TABLE
janus=> insert into todo (descr,done) values ('\''', false);
INSERT 0 1
janus=> select length(descr), descr from todo;
length | descr
--------+-------
2 | \'
(1 row)
如您所见,两个单引号(被解释为一个单引号)之前的反斜杠没有任何作用,它是按字面插入的。那么引用中引用的“标准”语法如何与反斜杠交互?他们似乎没有任何特殊待遇,他们就像任何其他角色一样。
您引用的文档是 9.1 版之前的遗留文件,默认情况下
standard_conforming_strings
是这样off
。从9.1开始,这个已经过时了,我提出了一个补丁来删除它。