jsonschema
jsonschema : JSON Schema validation functions for PostgreSQL
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 2760 | jsonschema
|
jsonschema
|
0.1.9 |
FEAT
|
MIT
|
Rust
|
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--s-d-r
|
No
|
Yes
|
No
|
Yes
|
yes
|
no
|
| Relationships | |
|---|---|
| See Also | pg_jsonschema
jsquery
pg_graphql
plv8
|
Distinct from Supabase pg_jsonschema.
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| 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 / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
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
|
Source
pig build pkg jsonschema; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall 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 14Create 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":"[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.