몇 가지 다른 문자열로 입력 제한


11

안녕하세요, postgreSQL에서 예상대로 작동하는 제약 조건을 얻을 수없는 것 같습니다. pgadmin에서 다음 SQL 쿼리를 실행합니다.

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';

실행되면로 변환됩니다.

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';

유형 열에 대한 입력이 전자 메일 게시물 IRL 또는 분 중 하나로 제한 될 것으로 예상됩니다. 그러나 테이블 데이터를 입력 할 때 이러한 유형 중 하나를 입력하면이 제약 조건이 실패합니다. 유형 열은 문자 유형입니다. 누구 든지이 문제를 해결하는 방법을 알고 있습니다. 감사.


3
내가 뭔가를 이해하지 못하면, 읽는 것이 훨씬 쉽지 않은 이유가 CHECK (type in ('email','post','IRL','minutes')있습니까?
rfusca

답변:


15

제약 조건을

CHECK (type IN ('email','post','IRL','minutes'))

이것은 파서에 의해 다음과 같이 변환됩니다 :

CHECK (type = ANY( ARRAY['email','post','IRL','minutes']))

그것은 당신이보고있는 일을해야합니다.

그러나 이것이 더 좋지 않을지 궁금합니다.

CREATE TABLE comlog_types (
     type text
);

그런 다음 외래 키를 추가하여 제약 조건을 적용하십시오. 이렇게하면 나중에 유형을 쉽게 추가 할 수 있습니다.


고마워, 그것은 완벽하게 해결되었습니다. 나중에 외래 키 방법으로 변경하는 것을 고려할 수 있습니다.
wookie1

2
예, 잘 작동합니다. 그러나 PostgreSQL의 enum 데이터 유형 을 확인하고 싶을 수도 있습니다 .
XåpplI'-I0llwlg'I-
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.