pg_jsonschema: JSON Schema 验证
JSON Schema 是一种用于注释和验证 JSON 文档的语言。pg_jsonschema
是一个 Postgres 扩展,它增加了根据 JSON Schema 文档验证 PostgreSQL 内置的 json
和 jsonb
数据类型的能力。
启用扩展
- 进入 Dashboard 中的数据库页面
- 点击侧边栏中的 Extensions
- 搜索
pg_jsonschema
并启用该扩展
函数
json_matches_schema(schema json, instance json)
: 检查json
实例是否符合 JSON Schema 模式jsonb_matches_schema(schema json, instance jsonb)
: 检查jsonb
实例是否符合 JSON Schema 模式
使用方法
由于 pg_jsonschema
将其功能以函数形式暴露,我们可以通过 select 语句来执行:
12345select extensions.json_matches_schema( schema := '{"type": "object"}', instance := '{}' );
pg_jsonschema
通常与 check 约束 结合使用,用于约束 json/b 列的内容以匹配 JSON Schema。
123456789101112131415161718192021222324252627282930313233343536create table customer( id serial primary key, ... metadata json, check ( json_matches_schema( '{ "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "string", "maxLength": 16 } } } }', metadata ) ));-- 示例:有效载荷insert into customer(metadata)values ('{"tags": ["vip", "darkmode-ui"]}');-- 结果:-- INSERT 0 1-- 示例:无效载荷insert into customer(metadata)values ('{"tags": [1, 3]}');-- 结果:-- ERROR: relation "customer" 的新行违反检查约束 "customer_metadata_check"-- DETAIL: 失败行包含 (2, {"tags": [1, 3]})。