如何将postgres中的varchar限制为只允许DB中的特定字符



我有一种情况,需要使用django在Postgres DB的varchar列中只允许特定字符。

它应该限制用户输入其他字符,即使他直接使用原始SQL查询进行编辑。有没有我可以在Django和Postgres中使用的验证器。

我发现这对在Django中使用很有帮助-如何使Django表单字段只包含字母数字字符但是,如果用户使用原始SQL查询修改数据,该怎么办?

在PostreSQL中,您可以向特定列添加CHECK约束,例如

CREATE TABLE gender (val text);

此约束将只允许值fmint字段val

ALTER TABLE gender ADD CONSTRAINT gender_vals CHECK (val IN ('f','m'));

测试

INSERT INTO gender VALUES ('f'),('m');
INSERT 0 2
INSERT INTO gender VALUES ('x');
ERROR:  new row for relation "gender" violates check constraint "gender_vals"
DETAIL:  Failing row contains (x).

或者,您已经可以创建具有此约束的表,上面链接的文档中对此进行了描述。

演示:db<>fiddle

最新更新