我在PostgreSQL中找不到有關JSON模式驗證的任何信息,有什麼方法可以在PostgreSQL JSON數據類型上實現JSON模式驗證嗎?PostgreSQL中的JSON模式驗證?
14
A
回答
4
有一個PostgreSQL extension在PL/PgSQL中實現JSON模式驗證。
它這樣使用(從項目的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).
3
你需要的是東西JSON模式約束轉化爲PostgreSQL的那些,例如:
{
"properties": {
"age": {"minimum": 21}
},
"required": ["age"]
}
到:
SELECT FROM ...
WHERE (elem->>'age' >= 21)
我不知道任何現有的工具。我知道MySQL類似的東西可能對編寫自己的東西有用,但對於在PostgreSQL中使用JSON類型沒有用處。
1
還有一個PostgreSQL extension實現JSON驗證。用法是幾乎相同「的Postgres,JSON-模式」
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).
我做了一些基準測試驗證的鳴叫,這是超過20倍「的Postgres,JSON-模式」更快,主要是因爲它是用C而不是SQL。
免責聲明,我已經寫了這個擴展名。
相關問題
- 1. JSON模式驗證
- 2. JSON模式驗證工具
- 3. 驗證使用JSON模式
- 4. JSON模式,oneOf驗證
- 5. CXF - Json模式驗證
- 6. java中的json模式驗證
- 7. 對.Net中的模式驗證JSON
- 8. NancyFX中的JSON模式驗證
- 9. 如何驗證JSON模式驗證中的枚舉值?
- 10. JSON模式驗證:在JSON數組
- 11. java.lang.NoSuchFieldError:在通過json模式驗證器驗證json模式時拋出USE_DEFAULTS
- 12. 如何在Postgresql中驗證JSON有效?
- 13. aws lambda上的json模式驗證
- 14. Datapower上的JSON模式驗證
- 15. 使用Java的JSON模式驗證
- 16. JSON模式驗證程序未加載
- 17. 使用PHP進行JSON模式驗證
- 18. Json模式動態密鑰驗證
- 19. C#:JSON模式驗證和JSON.stringify
- 20. 驗證JSON模式爲已知值
- 21. 所有FHIR JSON模式不驗證
- 22. jmeter斷言來驗證json模式
- 23. NodeJS JSON模式驗證不起作用
- 24. Symfony json模式驗證:無html標籤
- 25. 驗證json格式
- 26. JPA中的驗證模式
- 27. Postgresql json字段數組項目驗證
- 28. 如何根據Swagger模式驗證JSON模式的實例?
- 29. 模式驗證
- 30. 驗證在PostgreSQL
您是否知道是否有任何性能負載測試用於此驗證? – khorvat
我不知道。該代碼非常簡短(259行),是一個非常直接的PL/PgSQL,可以解釋。你應該用你自己的模式來衡量它。 – Mordae