我能否在PostgreSQL数据库中的bytea字段上设置大小限制?

5

我在PostgreSQL数据库中有很多bytea字段。

(i) 有没有一种方法可以通过使用数据库功能对这些字段设置大小限制(以便如果尝试超出此大小,就会抛出错误)?

(ii) 或者,有没有一种在SQLAlchemy中实现这个目的的好方法?

1个回答

5
您可以在 PostgreSQL 大小上使用域名。
CREATE DOMAIN my_bytea_8 AS bytea CHECK(length(value) <= 8);

postgres=# SELECT 'NAZDARBAZAR'::my_bytea_8;
ERROR:  23514: value for domain my_bytea_8 violates check constraint "my_bytea_8_check"
SCHEMA NAME:  public
DATATYPE NAME:  my_bytea_8
CONSTRAINT NAME:  my_bytea_8_check
LOCATION:  ExecEvalCoerceToDomain, execQual.c:4042

3
只需在相关列上添加一个CHECK即可。 - mu is too short
对于那些感兴趣的人,我找到了一系列链接来解释这个问题:bytea长度函数(http://www.postgresql.org/docs/8.2/static/functions-binarystring.html);创建域(http://www.postgresql.org/docs/9.1/static/sql-createdomain.html);以及在SQLAlchemy约束中(http://docs.sqlalchemy.org/en/latest/core/constraints.html);但是在SQLAlchemy中创建域存在问题(https://dev59.com/dGMl5IYBdhLWcg3wJD9S);可能有另一种方法在SQLAlchemy中实现。 - Soferio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接