我正在使用postgresql作为微服务的文档存储 . 数据是非规范化的,我只需要简单查询,更新和删除代表服务主域实体的文档 . 我想知道是否可以对另一个sql表进行jsonb字段验证 . 例如:
Json文件:
{
"state": "NY",
"city": "Brooklyn",
}
然后我希望在美国有一个充满有效状态和城市的sql表,我们称之为“GeoLocations”,并对json文档执行字段验证 . 验证逻辑将是“在提交此json对象之前确认json - >>'state'存在于表”GeoLocations“中 . 如果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') != '');
与此示例无关 - 但这是正在运行的语法 .
我倾向于用“检查”约束来尝试这个但不太确定如何去做 .