0
PostgreSQL 10.1을 사용하고 있습니다.'LIKE'를 사용하는 PostgreSQL CHECK 제약 조건은 실패하지만 '~와 ~ POSIX'! ~ * '와 함께 성공합니다.
나는 다음과 같은 테이블을 생성 :
CREATE TABLE country
(
id smallint NOT NULL,
alpha2 character varying(2) NOT NULL,
alpha3 character varying(3) NOT NULL,
name character varying(38) NOT NULL,
CONSTRAINT country_pkey PRIMARY KEY (id),
CONSTRAINT country_alpha2_key UNIQUE (alpha2),
CONSTRAINT country_alpha3_key UNIQUE (alpha3),
CONSTRAINT country_name_key UNIQUE (name),
CONSTRAINT country_alpha2_check
CHECK ((char_length(alpha2::text)) = 2 AND
(alpha2 NOT LIKE '%[^a-zA-Z]%')),
CONSTRAINT country_alpha3_check
CHECK ((char_length(alpha3::text)) = 3 AND
(alpha3 NOT LIKE '%[^a-zA-Z]%')),
CONSTRAINT country_name_check CHECK (char_length(name::text) > 0)
);
불행하게도, 다음 명령문은 비록 그것이 안 성공 :
INSERT INTO country (id, alpha2, alpha3, name)
VALUES (1, '11', '111', 'Haiti');
내가 SIMILAR TO
와 LIKE
다음 위의 문은 예상대로 실패로 대체합니다.
NOT LIKE '%[^a-zA-Z]%'
을 POSIX Regex !~* '[^a-zA-Z]'
으로 대체하면 위의 명령문도 제대로 수행되지 않습니다.
LIKE
이 실패하는 이유는 무엇입니까? 내가 본 예제 중 대부분은 LIKE
을 사용합니다! LIKE가 일하는 것을 좋아하지 않는 것 같습니다!
티아
'LIKE'는 정규 표현식을 지원하지 않습니다 : https://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-LIKE –
OK,하지만 패턴 매칭을 지원합니다 (9.7.1 장 매뉴얼에 있음). '% [^ a-zA-Z] %'는 패턴 또는 정규 표현식입니까? – SONewbiee
Oooohhh! '% [a-zA-Z] %'에 '^'문자를 추가하면 패턴에서 정규 표현식이됩니다 ('% [^ a-zA-Z] %'). 이게 설명인가요? – SONewbiee