PostgreSQL "invalid regular expression: invalid escape \ sequence" 使用 Regex 约束时
PostgreSQL "invalid regular expression: invalid escape \ sequence" when using Regex constraint
这是我的 SQL 代码:
CREATE TABLE country (
id serial NOT NULL PRIMARY KEY,
name varchar(100) NOT NULL CHECK(name ~ '^[-\p{L} ]{2,100}$'),
code varchar(3) NOT NULL
);
注意 regex 约束在 name
属性。上面的代码将导致 ERROR: invalid regular expression: invalid escape \ sequence
.
我尝试使用转义 CHECK(name ~ E'^[-\p{L} ]{2,100}$')
但结果还是 ERROR: invalid regular expression: invalid escape \ sequence
.
我也知道,如果我这样做 CHECK(name ~ '^[-\p{L} ]{2,100}$'),
或 CHECK(name ~ E'^[-\p{L} ]{2,100}$'),
- SQL 将收到错误的正则表达式,因此在插入有效数据时会引发约束冲突。
PostgreSQL 正则表达式约束是否不支持正则表达式模式 (\p
) 或类似的东西?
编辑#1
正则表达式 ^[-\p{L} ]{2,100}$
基本上允许国家名称在 2-100 个字符之间,允许的字符是连字符、白色-space 和所有字母(包括拉丁字母)。
注意: SQL 在 table 创建期间运行得很好,但在插入有效数据时会抛出错误。
补充说明:我正在使用 PostgreSQL12.1
\p{L}
Unicode 类别 (属性) class 匹配任何字母,但在 PostgreSQL regex 中不受支持。
您可能会使用 [:alpha:]
POSIX 字符 class
得到相同的行为
'^[-[:alpha:] ]{2,100}$'
这是我的 SQL 代码:
CREATE TABLE country (
id serial NOT NULL PRIMARY KEY,
name varchar(100) NOT NULL CHECK(name ~ '^[-\p{L} ]{2,100}$'),
code varchar(3) NOT NULL
);
注意 regex 约束在 name
属性。上面的代码将导致 ERROR: invalid regular expression: invalid escape \ sequence
.
我尝试使用转义 CHECK(name ~ E'^[-\p{L} ]{2,100}$')
但结果还是 ERROR: invalid regular expression: invalid escape \ sequence
.
我也知道,如果我这样做 CHECK(name ~ '^[-\p{L} ]{2,100}$'),
或 CHECK(name ~ E'^[-\p{L} ]{2,100}$'),
- SQL 将收到错误的正则表达式,因此在插入有效数据时会引发约束冲突。
PostgreSQL 正则表达式约束是否不支持正则表达式模式 (\p
) 或类似的东西?
编辑#1
正则表达式 ^[-\p{L} ]{2,100}$
基本上允许国家名称在 2-100 个字符之间,允许的字符是连字符、白色-space 和所有字母(包括拉丁字母)。
注意: SQL 在 table 创建期间运行得很好,但在插入有效数据时会抛出错误。
补充说明:我正在使用 PostgreSQL12.1
\p{L}
Unicode 类别 (属性) class 匹配任何字母,但在 PostgreSQL regex 中不受支持。
您可能会使用 [:alpha:]
POSIX 字符 class
'^[-[:alpha:] ]{2,100}$'