2016-08-03 13 views
0

Ich möchte verhindern, dass Nicht-ASCII-Zeichenfolgen in eine bestimmte Spalte in meiner postgres-db-Tabelle geschrieben werden. Ich dachte über die Verwendung von constrains, aber ich bekomme eine Fehlermeldung, wenn Sie versuchen, eine der Konvertierungsfunktionen Codierung zu verwenden. Die Verwendung anderer String-Funktionen wie lower oder btrim funktioniert ohne Problem.Verhindern, dass Nicht-ASCII-Zeichenfolgen in die Spalte geschrieben werden

metadata = MetaData() 
constrains = [CheckConstraint('lower(name) = name', name='enforce_lower'), 
      CheckConstraint('utf8_to_ascii(name) = name', name='prevent_non_ascii')] 
concepts_table = Table('test20', metadata, 
         Column('name', Text, *constrains)) 
metadata.create_all(engine, checkfirst=False)  

Die Fehlermeldung lautet:

(ProgrammingError) function utf8_to_ascii(text) does not exist

Das ist mein postgresql Version ist:

SELECT version(); 
PostgreSQL 9.5.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-16), 64-bit 

Antwort

1

Es gibt keine utf8_to_ascii(text) Funktion in postgresql (als Fehlermeldung Zustände;)). Stattdessen wird Konvertierung (mehr Conversions: https://www.postgresql.org/docs/current/static/sql-createconversion.html) definiert diesen Namen: https://www.postgresql.org/docs/current/static/functions-string.html#CONVERSION-NAMES

Für die Nutzung von bestehenden Wandlungs- convert(string bytea, src_encoding name, dest_encoding name)

Probieren folgende Einschränkung Definition:

CheckConstraint("encode(convert(name::bytea, 'UTF8'::name, 'SQL_ASCII'::name), 'escape') = name", name='prevent_non_ascii') 
+0

Dank! Dies führt jedoch zu folgendem Fehler: '(ProgrammingError) function convert (Text, unbekannt, unbekannt) existiert nicht HINWEIS: Keine Funktion stimmt mit den angegebenen Namen und Argumenttypen überein. Sie müssen möglicherweise explizite Typumwandlungen hinzufügen. – Framester

+1

Ich aktualisierte die Antwort. –

+0

Nun heißt es '(ProgrammingError) -Funktion konvertieren (Text, Name, Name) existiert nicht HINWEIS: Keine Funktion entspricht den angegebenen Namen und Argumenttypen. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen. Auch ich fand utf6_to_ascii auf dieser Website: https://www.postgresql.org/docs/current/static/functions-string.html – Framester

Verwandte Themen