jsquery

jsquery

jsquery : data type for jsonb inspection

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
2770
jsquery
jsquery
1.2
FEAT
PostgreSQL
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d-r
No
Yes
No
Yes
yes
no
Relationships
See Also
pg_graphql
pg_jsonschema
plv8
jsonb_plperl
jsonb_plpython3u
pg_net
pg_summarize
age

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
1.2
18
17
16
15
14
jsquery-
RPM
PGDG
1.2
18
17
16
15
14
jsquery_$v-
DEB
PGDG
1.2
18
17
16
15
14
postgresql-$v-jsquery-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
el8.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
el9.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
el9.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
el10.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
el10.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
d12.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
d12.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
d13.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
d13.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
u22.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
u22.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
u24.x86_64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
u24.aarch64
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2
PGDG 1.2

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

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

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

Create this extension with:

CREATE EXTENSION jsquery;

Usage

jsquery: data type for jsonb inspection

JsQuery provides a query language for JSONB data, similar to what tsquery does for full-text search. It offers a concise way to search nested objects and arrays with index support via GIN.

Operators

OperatorDescription
@@Match operator: test whether a jsonb value matches a jsquery expression

Query Syntax

Expressions follow the pattern path operator value:

Binary operators:

  • = (equality), >, >=, <, <= (comparison)
  • IN (list membership)
  • && (overlap), @> (contains), <@ (contained in)

Unary operators:

  • = * (existence check)
  • IS ARRAY, IS NUMERIC, IS OBJECT, IS STRING, IS BOOLEAN (type checking)

Path Expressions

SymbolMeaning
#Any array index
#NSpecific array index N
%Any object key
*Any sequence of keys/indexes
@#Array/object length
$Entire document

“Every” semantics (all elements must match):

  • #: – all array elements
  • %: – all object keys
  • *: – all nested paths

Examples

Simple value matching:

SELECT * FROM jsonb_table WHERE data @@ 'name = "Alice"';
SELECT * FROM jsonb_table WHERE data @@ 'age > 21';
SELECT * FROM jsonb_table WHERE data @@ 'tags.#: IS STRING';

Logical combinations:

SELECT * FROM jsonb_table WHERE data @@ 'a = 1 AND (b = 2 OR c = 3)';

Array element matching (find array elements where both conditions hold):

SELECT * FROM jsonb_table WHERE data @@ '#(a = 1 AND b = 2)';

Object key range matching:

SELECT * FROM jsonb_table WHERE data @@ '%($ >= 10 AND $ <= 20)';

GIN Indexing

Two operator classes for different query patterns:

-- Best for range and exact searches when full path is known
CREATE INDEX ON jsonb_table USING gin (data jsonb_path_value_ops);

-- Best for exact value searches; supports % and * in paths
CREATE INDEX ON jsonb_table USING gin (data jsonb_value_path_ops);

Optimizer hints for index usage:

SELECT * FROM jsonb_table WHERE data @@ 'x = 1 /*-- index */ AND y = 2';
SELECT * FROM jsonb_table WHERE data @@ 'x = 1 /*-- noindex */ AND y = 2';

Schema Validation via CHECK Constraints

CREATE TABLE documents (
    id serial PRIMARY KEY,
    data jsonb CHECK (data @@ 'name IS STRING AND similar_ids.#: IS NUMERIC'::jsquery)
);
Last updated on