我想防止将非ASCII字符串写入到postgres数据库表中的特定列中。我想过使用constrains
,但在尝试使用任何编码转换函数时收到错误消息。使用其他字符串函数,如lower
或btrim
工作没有问题。防止将非ASCII字符串写入列
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)
的错误信息是:
(ProgrammingError) function utf8_to_ascii(text) does not exist
这是我的PostgreSQL的版本:
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
谢谢!但是,这导致以下错误:'(ProgrammingError)函数转换(文本,未知,未知)不存在 提示:没有函数匹配给定的名称和参数类型。你可能需要添加明确的类型转换。' – Framester
我更新了答案。 –
现在它说'(ProgrammingError)函数转换(文本,名称,名称)不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加明确的类型转换。“我还在本网站上发现了utf6_to_ascii:https://www.postgresql.org/docs/current/static/functions-string.html – Framester