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}$'