我正在使用postgresql作为微服务的文档存储。数据是非规范化的,我只需要简单查询,更新和删除代表服务主域实体的文档。我想知道是否可以对另一个sql表进行jsonb字段验证。例如:
Json文件:
{
"state": "NY",
"city": "Brooklyn",
}
我希望在美国有一个充满有效状态和城市的SQL表,我们称之为“GeoLocations”,并对json文档执行字段验证。验证逻辑将是“在提交此json对象之前确认表”GeoLocations“中存在json->>'state'。如果json文档的state字段不包含也在GeoLocations.State内的字符串如果列约束失败,则不应将json文档添加到json文档表中。
以下是我目前正在创建约束的方法:
-- Create users table
CREATE TABLE users ( u jsonb NOT NULL);
-- Default GIN index over entire document
CREATE INDEX idxginusers ON users USING GIN (u);
-- Force username to be unique
CREATE UNIQUE INDEX users_username ON users( (u->>'username') );
-- Force username to be non-null
ALTER TABLE users ADD CONSTRAINT username_must_exist CHECK (u ? 'username');
-- Force username not to be empty string
ALTER TABLE users ADD CONSTRAINT username_must_not_be_empty_string CHECK ((u->>'username') != '');
--Force password to be non-null
ALTER TABLE users ADD CONSTRAINT username_must_exist CHECK (u ? 'password');
-- Force password not to be empty string
ALTER TABLE users ADD CONSTRAINT password_must_not_be_empty_string CHECK ((u->>'password') != '');
与此示例无关 - 但这是有效的语法。
我倾向于尝试使用“检查”约束但不太确定如何去做。