Skip to content
jsonschema

jsonschema

jsonschema : JSON Schema validation functions for PostgreSQL

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
2760
jsonschema
jsonschema
0.1.9
FEAT
MIT
Rust
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d-r
No
Yes
No
Yes
yes
no
Relationships
See Also
pg_jsonschema
jsquery
pg_graphql
plv8

Distinct from Supabase pg_jsonschema.

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PIGSTY
0.1.9
18
17
16
15
14
jsonschema-
RPM
PIGSTY
0.1.9
18
17
16
15
14
jsonschema_$v-
DEB
PIGSTY
0.1.9
18
17
16
15
14
postgresql-$v-jsonschema-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
el8.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
el9.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
el9.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
el10.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
el10.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
d12.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
d12.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
d13.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
d13.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
u22.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
u22.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
u24.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
u24.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
u26.x86_64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
u26.aarch64
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PIGSTY 0.1.9
PackageVersionOSORGSIZEFile URL
jsonschema_180.1.9el8.x86_64pigsty924.8 KiBjsonschema_18-0.1.9-1PIGSTY.el8.x86_64.rpm
jsonschema_180.1.9el8.aarch64pigsty806.8 KiBjsonschema_18-0.1.9-1PIGSTY.el8.aarch64.rpm
jsonschema_180.1.9el9.x86_64pigsty936.5 KiBjsonschema_18-0.1.9-1PIGSTY.el9.x86_64.rpm
jsonschema_180.1.9el9.aarch64pigsty875.2 KiBjsonschema_18-0.1.9-1PIGSTY.el9.aarch64.rpm
jsonschema_180.1.9el10.x86_64pigsty933.5 KiBjsonschema_18-0.1.9-1PIGSTY.el10.x86_64.rpm
jsonschema_180.1.9el10.aarch64pigsty875.7 KiBjsonschema_18-0.1.9-1PIGSTY.el10.aarch64.rpm
postgresql-18-jsonschema0.1.9d12.x86_64pigsty785.2 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~bookworm_amd64.deb
postgresql-18-jsonschema0.1.9d12.aarch64pigsty664.6 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~bookworm_arm64.deb
postgresql-18-jsonschema0.1.9d13.x86_64pigsty786.4 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~trixie_amd64.deb
postgresql-18-jsonschema0.1.9d13.aarch64pigsty664.6 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~trixie_arm64.deb
postgresql-18-jsonschema0.1.9u22.x86_64pigsty873.1 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~jammy_amd64.deb
postgresql-18-jsonschema0.1.9u22.aarch64pigsty797.3 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~jammy_arm64.deb
postgresql-18-jsonschema0.1.9u24.x86_64pigsty862.5 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~noble_amd64.deb
postgresql-18-jsonschema0.1.9u24.aarch64pigsty782.2 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~noble_arm64.deb
postgresql-18-jsonschema0.1.9u26.x86_64pigsty856.4 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~resolute_amd64.deb
postgresql-18-jsonschema0.1.9u26.aarch64pigsty778.5 KiBpostgresql-18-jsonschema_0.1.9-1PIGSTY~resolute_arm64.deb

Source

pig build pkg jsonschema;		# build rpm/deb

Install

Make sure PGDG and PIGSTY repo available:

pig repo add pgsql -u   # add both repo and update cache

Install this extension with pig:

pig install jsonschema;		# install via package name, for the active PG version

pig install jsonschema -v 18;   # install for PG 18
pig install jsonschema -v 17;   # install for PG 17
pig install jsonschema -v 16;   # install for PG 16
pig install jsonschema -v 15;   # install for PG 15
pig install jsonschema -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION jsonschema;

Source: jsonschema v0.1.9 README, documentation, control file, SQL definition.

Usage

jsonschema validates JSON and JSONB values against JSON Schema inside PostgreSQL. It is the theory/pg-jsonschema-boon extension and is distinct from Supabase pg_jsonschema, although it provides compatibility wrappers named json_matches_schema() and jsonb_matches_schema().

The extension supports JSON Schema draft 4, draft 6, draft 7, draft 2019-09, and draft 2020-12 through the Rust boon validator. It has no runtime dependency beyond PostgreSQL.

Validate a Schema and a Document

CREATE EXTENSION IF NOT EXISTS jsonschema;

SELECT jsonschema_is_valid(
  '{
     "type": "object",
     "required": ["name", "email"],
     "properties": {
       "name":  { "type": "string" },
       "age":   { "type": "number", "minimum": 0 },
       "email": { "type": "string", "format": "email" }
     }
   }'::json
);

SELECT jsonschema_validates(
  '{"name":"Amos Burton","email":"amos@rocinante.ship"}'::json,
  '{
     "type": "object",
     "required": ["name", "email"],
     "properties": {
       "name":  { "type": "string" },
       "email": { "type": "string", "format": "email" }
     }
   }'::json
);

jsonschema_is_valid(schema) returns whether the schema itself compiles and validates against the selected draft. jsonschema_validates(data, schema) returns whether the JSON/JSONB value satisfies the schema.

Check Constraints

CREATE TABLE customer_profile (
  id       bigserial PRIMARY KEY,
  profile  jsonb NOT NULL,
  CHECK (
    jsonschema_validates(
      profile,
      '{
         "type": "object",
         "required": ["email"],
         "properties": {
           "email": { "type": "string", "format": "email" },
           "tags":  {
             "type": "array",
             "items": { "type": "string", "maxLength": 16 }
           }
         }
       }'::jsonb
    )
  )
);

Use constraints when the database should reject malformed JSON documents at write time.

Composed Schemas

SELECT jsonschema_validates(
  jsonb_build_object(
    'first_name', 'Naomi',
    'last_name', 'Nagata',
    'shipping_address', jsonb_build_object(
      'street_address', '1 Rocinante Way',
      'city', 'Ceres Station',
      'state', 'The Belt'
    )
  ),
  'https://example.com/schemas/customer',
  '{
     "$id": "https://example.com/schemas/address",
     "type": "object",
     "required": ["street_address", "city", "state"],
     "properties": {
       "street_address": { "type": "string" },
       "city": { "type": "string" },
       "state": { "type": "string" }
     }
   }'::jsonb,
  '{
     "$id": "https://example.com/schemas/customer",
     "type": "object",
     "required": ["first_name", "last_name", "shipping_address"],
     "properties": {
       "first_name": { "type": "string" },
       "last_name": { "type": "string" },
       "shipping_address": { "$ref": "/schemas/address" }
     }
   }'::jsonb
);

The id overloads let multiple schemas reference each other by $id, which is useful for componentized JSON Schema definitions.

Compatibility Functions

SELECT json_matches_schema(
  '{"type":"string","maxLength":4}'::json,
  '"1234"'::json
);

SELECT jsonb_matches_schema(
  '{"type":"object","required":["id"]}'::json,
  '{"id":42}'::jsonb
);

These wrappers mirror the common pg_jsonschema argument order: schema first, instance second.

Draft Selection and Caveats

SET jsonschema.default_draft = 'V2020';
SET jsonschema.default_draft = 'V7';

If a schema omits $schema, jsonschema.default_draft controls the default draft. Supported values are V4, V6, V7, V2019, and V2020.

  • jsonschema_validates(data, schema) returns NULL if either argument is NULL.
  • Invalid or uncompilable schemas can raise errors in validation calls; failed document validation returns false and logs details at INFO.
  • jsonschema_is_valid(id, VARIADIC schemas) and jsonschema_validates(data, id, VARIADIC schemas) require matching $id values for reliable composed-schema resolution.
Last updated on