Du kan definere ASCII
som ordinal 1 to 127
til dette formål, så følgende forespørgsel vil identificere en streng med "non-ascii"-værdier:
SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
men det er sandsynligvis ikke supereffektivt, og brugen af underforespørgsler ville tvinge dig til at gøre det i en trigger frem for en CHECK-begrænsning.
I stedet ville jeg bruge et regulært udtryk. Hvis du vil have alle udskrivbare tegn så kan du bruge et interval i en kontrolbegrænsning, såsom:
CHECK (my_column ~ '^[ -~]*$')
dette vil matche alt fra mellemrummet til tilden , som er det udskrivbare ASCII-område.
Hvis du vil have alle ASCII, printbare og ikke-printbare, kan du bruge byte escapes :
CHECK (my_column ~ '^[\x00-\x7F]*$')
Den mest strengt korrekte tilgang ville være at convert_to(my_string, 'ascii')
og lad en undtagelse blive rejst, hvis den mislykkes ... men PostgreSQL tilbyder ikke en ascii
(dvs. 7-bit) kodning, så den tilgang er ikke mulig.