PostgreSQL中的JSON Schema验证?

时间:2014-03-06 15:15:45

标签: json postgresql jsonschema postgresql-json

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

3 个答案:

答案 0 :(得分:9)

有一个PostgreSQL extension在PL / PgSQL中实现JSON Schema验证。

它是这样使用的(取自项目自述文件):

CREATE TABLE example (id serial PRIMARY KEY, data jsonb);
ALTER TABLE example ADD CONSTRAINT data_is_valid CHECK (validate_json_schema('{"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).

答案 1 :(得分:9)

还有另一个PostgreSQL extension实现了json验证。用法几乎与" Postgres-JSON-schema"

相同
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).

我已经完成了一些基准测试验证推文,它比" Postgres-JSON-schema"快20倍,主要是因为它是用C而不是SQL编写的。

免责声明,我已经写过此扩展程序。

答案 2 :(得分:3)

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

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

为:

SELECT FROM ...
WHERE (elem->>'age' >= 21)

我不知道任何现有的工具。我知道MySQL类似的东西可能对编写自己的东西很有用,但在PostgreSQL中使用JSON类型没什么用。