我正在使用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') != '');

与此示例无关 - 但这是正在运行的语法 .

我倾向于用“检查”约束来尝试这个但不太确定如何去做 .