2016-02-24 7 views
1

Я перемещаю базу данных с SQL Server на PostgreSQL и затрагиваю некоторые проблемы с контрольным ограничением в одной из таблиц. Версия PostgreSQL - 9.5.1.String Format Constraint В столбце PostgreSQL не работает

У меня есть таблица, которую я создал с ограничением проверки на одном из столбцов, чтобы обеспечить формат. Это работало в SQL Server. Идея состоит в том, что только значения, начинающиеся с букв AF и сопровождаемых тремя числовыми символами (например, AF001), могут быть введены в один из столбцов.

SQL, выглядел так, чтобы создать таблицу:

CREATE TABLE TableName (
referenceID  VARCHAR(5) NOT NULL CHECK (referenceID LIKE 'AF[0-9][0-9][0-9]'), 
comment   VARCHAR(50) NOT NULL, 
PRIMARY KEY (referenceID) 
); 

Но когда я пытаюсь ввести любые данные, которые он терпит неудачу. Пример ввода данных:

INSERT INTO TableName (reference, comment) VALUES ('AF000','A comment'); 

Ошибки я получаю:

ERROR: new row for relation "tablename" violates check constraint "tablename_referenceID_check" 
DETAIL: Failing row contains (AF000, A comment). 

********** Error ********** 

ERROR: new row for relation "TableName" violates check constraint "tablename_referenceID_check" 
SQL state: 23514 
Detail: Failing row contains (AF000, A comment). 

Я предполагаю, что вопрос с фактической проверки ограничения, но я не уверен.

ответ

2

Предложение LIKE не использует шаблоны регулярных выражений в PostgreSQL. Вместо LIKE вы должны использовать пункт SIMILAR TO:

CREATE TABLE TableName (
referenceID  VARCHAR(5) NOT NULL CHECK (referenceID SIMILAR TO 'AF[0-9]{3}'), 
comment   VARCHAR(50) NOT NULL, 
PRIMARY KEY (referenceID) 
);