이 목적을 위해 ordinal 1 to 127
로 ASCII
을 정의 할 수 있습니다, 그래서 다음 쿼리는 "비 ASCII"값으로 문자열을 식별 :
SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
하지만 슈퍼 효율적으로하지 가능성 및 사용 하위 쿼리를 사용하면 CHECK 제약 조건 대신 트리거에서 강제로 수행하게됩니다.
대신 정규식을 사용합니다. 인쇄 가능한 ASCII 범위 인
CHECK (my_column ~ '^[ -~]*$')
this will match everything from the space to the tilde : 당신이 을 원하는 경우 인쇄 가능한 모든 문자는 다음처럼, 점검 제한 조건의 범위를 사용할 수 있습니다.
CHECK (my_column ~ '^[\x00-\x7F]*$')
가 가장 엄격하게 올바른 접근 방식은 convert_to(my_string, 'ascii')
로하고 실패하면 예외를 발생 할 것입니다 ...하지만 : 모든 ASCII가, 인쇄 및 인쇄 할 수없는하려면
, 당신은 use byte escapes 수 PostgreSQL은 ascii
(즉, 7 비트) 인코딩을 제공하지 않으므로 접근이 불가능합니다.