Project Icon

pg_jsonschema

高性能 JSON Schema 验证扩展

pg_jsonschema 是一个 PostgreSQL 扩展,为 json 和 jsonb 数据类型提供 JSON Schema 验证支持。该扩展基于 Rust 的 jsonschema crate 实现,提供高性能的验证功能,尤其在复杂模式下表现突出。它支持最新的 JSON Schema 规范,可用于约束数据库列符合特定模式,是处理 PostgreSQL 中 JSON 数据验证的有力工具。

pg_jsonschema

PostgreSQL 版本 许可证


源代码: https://github.com/supabase/pg_jsonschema


概述

pg_jsonschema是一个PostgreSQL扩展,为jsonjsonb数据类型添加了JSON schema验证支持。

API

三个SQL函数:

  • json_matches_schema
  • jsonb_matches_schema(注意前面的jsonb
  • jsonschema_is_valid

函数签名如下:

-- 验证json *实例*是否符合*模式*
json_matches_schema(schema json, instance json) returns bool

以及

-- 验证jsonb *实例*是否符合*模式*
jsonb_matches_schema(schema json, instance jsonb) returns bool

以及

-- 验证json *模式*是否有效
jsonschema_is_valid(schema json) returns bool

使用方法

这些函数可用于限制jsonjsonb列符合特定模式。

例如:

create extension pg_jsonschema;

create 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:  新行违反了关系"customer"的检查约束"customer_metadata_check"
--   DETAIL:  失败的行包含 (2, {"tags": [1, 3]})。

JSON Schema 支持

pg_jsonschema 是 jsonschema Rust crate 的一个(非常)薄的封装。访问他们的文档以获取有关支持哪些 JSON Schema 规范草案的完整详细信息。

试用

通过 docker-compose up 在 Docker 容器中启动安装了 pg_jsonschema 的 Postgres。数据库可在 postgresql://postgres:password@localhost:5407/app 访问。

安装

需要:

cargo pgrx run

这将进入 psql 提示符。

psql (13.6)
输入 "help" 获取帮助。

pg_jsonschema=# create extension pg_jsonschema;
CREATE EXTENSION

pg_jsonschema=# select json_matches_schema('{"type": "object"}', '{}');
 json_matches_schema 
---------------------
 t
(1 行)

有关更完整的安装指南,请参阅 pgrx 文档。

先前工作

postgres-json-schema - 用 PL/pgSQL 编写的 JSON Schema PostgreSQL 扩展

is_jsonb_valid - 用 C 编写的 JSON Schema PostgreSQL 扩展

pgx_json_schema - 使用 pgrx + jsonschema 编写的 JSON Schema PostgreSQL 扩展

基准测试

系统

  • 2021 MacBook Pro M1 Max (32GB)
  • macOS 14.2
  • PostgreSQL 16.2

设置

对 20k 个唯一插入验证以下模式

{
    "type": "object",
    "properties": {
        "a": {"type": "number"},
        "b": {"type": "string"}
    }
}
create table bench_test_pg_jsonschema(
    meta jsonb,
    check (
        jsonb_matches_schema(
            '{"type": "object", "properties": {"a": {"type": "number"}, "b": {"type": "string"}}}',
            meta
        )
    )
);

insert into bench_test_pg_jsonschema(meta)
select
    json_build_object(
        'a', i,
        'b', i::text
    )
from
    generate_series(1, 20000) t(i);
-- 查询在 351 毫秒内完成

作为比较,使用 postgres-json-schema 的 validate_json_schema 函数进行的等效测试用时 5.54 秒。在这个 JSON schema 示例中,pg_jsonschema 的速度提升了约 15 倍,随着 schema 变得更复杂,这种速度优势会迅速增加。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号