Можете да дефинирате ASCII
като ordinal 1 to 127
за тази цел, така че следната заявка ще идентифицира низ със стойности "non-ascii":
SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
но е малко вероятно да бъде свръхефективен и използването на подзаявки ще ви принуди да го направите в тригер, а не в ограничение CHECK.
Вместо това бих използвал регулярен израз. Ако искате всички знаци за печат тогава можете да използвате диапазон в ограничение за проверка, като:
CHECK (my_column ~ '^[ -~]*$')
това ще съответства на всичко от интервала до тилда , което е печатаемият ASCII диапазон.
Ако искате всички ASCII, печатаеми и непечатаеми, можете да използвате екранирани байтове :
CHECK (my_column ~ '^[\x00-\x7F]*$')
Най-стриктно правилният подход би бил convert_to(my_string, 'ascii')
и нека бъде повдигнато изключение, ако не успее ... но PostgreSQL не предлага ascii
(т.е. 7-битово) кодиране, така че този подход не е възможен.