Это мой 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
.
. Я попытался использовать escape 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 символов, а разрешенные символы - дефис, пробел и все буквы (включая латинские буквы).
ПРИМЕЧАНИЕ: SQL прекрасно работает при создании таблицы, но выдает ошибку при вставке действительных данных.
Дополнительное примечание: Я использую PostgreSQL 12.1