jsonschema
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
jsonschema | 0.1.9 | FEAT | MIT | Rust |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 2760 | jsonschema | No | Yes | No | Yes | No | Yes | - |
| Related | pg_jsonschema jsquery pg_graphql plv8 |
|---|
Distinct from Supabase pg_jsonschema; pgrx patched to 0.18.1.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.9 | 1817161514 | jsonschema | - |
| RPM | PIGSTY | 0.1.9 | 1817161514 | jsonschema_$v | - |
| DEB | PIGSTY | 0.1.9 | 1817161514 | postgresql-$v-jsonschema | - |
Build
You can build the RPM / DEB packages for jsonschema using pig build:
pig build pkg jsonschema # build RPM / DEB packages
Install
You can install jsonschema directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install jsonschema; # Install for current active PG version
pig ext install -y jsonschema -v 18 # PG 18
pig ext install -y jsonschema -v 17 # PG 17
pig ext install -y jsonschema -v 16 # PG 16
pig ext install -y jsonschema -v 15 # PG 15
pig ext install -y jsonschema -v 14 # PG 14
dnf install -y jsonschema_18 # PG 18
dnf install -y jsonschema_17 # PG 17
dnf install -y jsonschema_16 # PG 16
dnf install -y jsonschema_15 # PG 15
dnf install -y jsonschema_14 # PG 14
apt install -y postgresql-18-jsonschema # PG 18
apt install -y postgresql-17-jsonschema # PG 17
apt install -y postgresql-16-jsonschema # PG 16
apt install -y postgresql-15-jsonschema # PG 15
apt install -y postgresql-14-jsonschema # PG 14
Create Extension:
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":"[email protected]"}'::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
falseand logs details atINFO. jsonschema_is_valid(id, VARIADIC schemas)andjsonschema_validates(data, id, VARIADIC schemas)require matching$idvalues for reliable composed-schema resolution.
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.