U kunt ASCII
. definiëren als ordinal 1 to 127
voor dit doel, dus de volgende query identificeert een string met "niet-ascii"-waarden:
SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
maar het is waarschijnlijk niet superefficiënt, en het gebruik van subquery's zou je dwingen om het te doen in een trigger in plaats van een CHECK-beperking.
In plaats daarvan zou ik een reguliere expressie gebruiken. Als u alle afdrukbare tekens wilt hebben dan kun je een bereik gebruiken in een controlebeperking, zoals:
CHECK (my_column ~ '^[ -~]*$')
dit komt overeen met alles, van de ruimte tot de tilde , wat het afdrukbare ASCII-bereik is.
Als u alle ASCII-, afdrukbare en niet-afdrukbare wilt, kunt u byte-escapes gebruiken :
CHECK (my_column ~ '^[\x00-\x7F]*$')
De meest strikt correcte benadering zou zijn om convert_to(my_string, 'ascii')
en laat een uitzondering worden gemaakt als het mislukt ... maar PostgreSQL biedt geen ascii
(d.w.z. 7-bits) codering, dus die benadering is niet mogelijk.