postgres 对提交的字段进行正则检查

server那点事

多人协作,特别是跨团队协作,有很多比较麻烦的事。

例如自己团队规范了数据库里某字段怎么存储,但是别人的团队在数据库里存了一些你不期望的值,你的程序可能运行时候会出错。

在公用的开发环境数据库里给字段加上正则匹配,是避免这个情况发生的一个比较好的办法。

例如,Rails里使用的一个反模式,多态。在表里会有一个字段叫type,一般是类名。为了防止脏数据出现,可以加上正则匹配:

ALTER TABLE your_table ADD CONSTRAINT camel_case_type CHECK (type ~ $$^[A-Z]+$$);

如果运行会报错,可能要小心了,数据库里可能已经有脏数据了,先查出脏数据,处理好再加上正则匹配。

SELECT * FROM your_table WHERE type !~ $$^[A-Z]+$$;

发表于 2019.01.21