簡體   English   中英

PostgreSQL中的JSON Schema驗證?

[英]JSON Schema validation in PostgreSQL?

我在PostgreSQL中找不到有關JSON模式驗證的任何信息,有沒有辦法在PostgreSQL JSON數據類型上實現JSON模式驗證?

有一個PostgreSQL擴展 ,在PL / PgSQL中實現JSON Schema驗證。

它是這樣使用的(取自項目README文件):

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

還有另一個PostgreSQL擴展實現了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編寫的。

免責聲明,我已經寫了這個擴展名。

您需要的是將JSON Schema約束轉換為PostgreSQL約束,例如:

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

至:

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

我不知道任何現有的工具。 我知道類似MySQL的東西可能對編寫自己的東西很有用,但在PostgreSQL中使用JSON類型沒什么用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM