Postgresql Jsonb字段验证

时间:2018-01-01 20:30:07

标签: sql json postgresql jsonb

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

与此示例无关 - 但这是有效的语法。

我倾向于尝试使用“检查”约束但不太确定如何去做。

0 个答案:

没有答案