Můžete definovat ASCII
jako ordinal 1 to 127
pro tento účel, takže následující dotaz bude identifikovat řetězec s hodnotami "non-ascii":
SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
ale pravděpodobně to nebude superefektivní a použití poddotazů by vás donutilo to udělat ve spouštěči, nikoli v omezení CHECK.
Místo toho bych použil regulární výraz. Pokud chcete všechny tisknutelné znaky pak můžete použít rozsah v kontrolním omezení, například:
CHECK (my_column ~ '^[ -~]*$')
toto bude odpovídat všemu od prostoru po vlnovku , což je tisknutelný rozsah ASCII.
Pokud chcete všechny ASCII, tisknutelné i netisknutelné, můžete použít byte escape :
CHECK (my_column ~ '^[\x00-\x7F]*$')
Nejpřísněji správný přístup by byl convert_to(my_string, 'ascii')
a nechat vyvolat výjimku, pokud selže ... ale PostgreSQL nenabízí ascii
(tj. 7bitové) kódování, takže tento přístup není možný.