PostgreSQL中的JSON模式验证?

PostgreSQL中的JSON模式验证?,json,postgresql,jsonschema,postgresql-json,Json,Postgresql,Jsonschema,Postgresql Json,我在PostgreSQL中找不到任何关于JSON模式验证的信息,有没有办法在PostgreSQL JSON数据类型上实现JSON模式验证?您需要的是将JSON模式约束转换为PostgreSQL约束的东西,例如: { "properties": { "age": {"minimum": 21} }, "required": ["age"] } 致: 我不知道任何现有的工具。我知道一些类似的东西可能对编写自己的代码很有用,但对于在PostgreSQL中使用J

我在PostgreSQL中找不到任何关于JSON模式验证的信息,有没有办法在PostgreSQL JSON数据类型上实现JSON模式验证?

您需要的是将JSON模式约束转换为PostgreSQL约束的东西,例如:

{
    "properties": {
        "age": {"minimum": 21}
    },
    "required": ["age"]
}
致:

我不知道任何现有的工具。我知道一些类似的东西可能对编写自己的代码很有用,但对于在PostgreSQL中使用JSON类型却没有任何用处。

有一种方法可以在PL/PgSQL中实现JSON模式验证

它的用法如下(取自项目自述文件):

创建表示例(id序列主键,数据jsonb);
ALTER TABLE example ADD CONSTRAINT data_是_有效检查(验证_json_模式(“{”类型“:“对象”}”,数据));
插入示例(数据)值(“{}”);
--插入0 1
插入示例(数据)值(“1”);
--错误:关系“示例”的新行违反了检查约束“数据\u有效”
--详细信息:失败的行包含(2,1)。
还有一种实现json验证的方法。用法几乎与“Postgres JSON模式”相同

我已经做了一些基准测试来验证tweet,它比“Postgres JSON模式”快20倍,主要是因为它是用C而不是SQL编写的


免责声明,我已经编写了此扩展。

我认为目前没有可用的模式验证,您知道我们是否有可能使用V8引擎进行验证,例如在某些OnUpdate/OnInsert操作中?哦!抱歉,我误解了您的意思,以为您是在询问如何使用JSON模式进行查询,而不是验证。是的,作为钩子进行验证,甚至在提交之前在代码中进行验证似乎是合理的。可能会有帮助。你知道这个验证是否有性能负载测试吗?我不知道。代码相当短(259行),相当直接的PL/PgSQL,可以解释。您应该使用自己的模式来度量它。
SELECT FROM ...
WHERE (elem->>'age' >= 21)
CREATE TABLE example (id serial PRIMARY KEY, data jsonb);
-- do is_jsonb_valid instead of validate_json_schema
ALTER TABLE example ADD CONSTRAINT data_is_valid CHECK (is_jsonb_valid('{"type": "object"}', data));

INSERT INTO example (data) VALUES ('{}');
-- INSERT 0 1

INSERT INTO example (data) VALUES ('1');
-- ERROR:  new row for relation "example" violates check constraint "data_is_valid"
-- DETAIL:  Failing row contains (2, 1).