Skip to content
pgrdf

pgrdf

pgrdf : RDF, SPARQL, SHACL, and OWL reasoning for PostgreSQL

Overview

ID Extension Package Version Category License Language
2640
pgrdf
pgrdf
0.5.0
FEAT
MIT
Rust
Attribute Has Binary Has Library Need Load Has DDL Relocatable Trusted
--sLd--
No
Yes
Yes
Yes
no
no
Relationships
Schemas pgrdf
See Also
rdf_fdw
pg_sparql
rdkit

PG14-17 only; production hook/cache deployments should preload pgrdf.

Packages

Type Repo Version PG Major Compatibility Package Pattern Dependencies
EXT
PIGSTY
0.5.0
18
17
16
15
14
pgrdf -
RPM
PIGSTY
0.5.0
18
17
16
15
14
pgrdf_$v -
DEB
PIGSTY
0.5.0
18
17
16
15
14
postgresql-$v-pgrdf -
Linux / PG PG18 PG17 PG16 PG15 PG14
el8.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
el8.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
el9.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
el9.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
el10.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
el10.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
d12.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
d12.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
d13.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
d13.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u22.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u22.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u24.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u24.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u26.x86_64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
u26.aarch64
MISS
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY 0.5.0
Package Version OS ORG SIZE File URL
pgrdf_17 0.5.0 el8.x86_64 pigsty 3.9 MiB pgrdf_17-0.5.0-1PIGSTY.el8.x86_64.rpm
pgrdf_17 0.5.0 el8.aarch64 pigsty 3.3 MiB pgrdf_17-0.5.0-1PIGSTY.el8.aarch64.rpm
pgrdf_17 0.5.0 el9.x86_64 pigsty 3.8 MiB pgrdf_17-0.5.0-1PIGSTY.el9.x86_64.rpm
pgrdf_17 0.5.0 el9.aarch64 pigsty 3.5 MiB pgrdf_17-0.5.0-1PIGSTY.el9.aarch64.rpm
pgrdf_17 0.5.0 el10.x86_64 pigsty 3.8 MiB pgrdf_17-0.5.0-1PIGSTY.el10.x86_64.rpm
pgrdf_17 0.5.0 el10.aarch64 pigsty 3.5 MiB pgrdf_17-0.5.0-1PIGSTY.el10.aarch64.rpm
postgresql-17-pgrdf 0.5.0 d12.x86_64 pigsty 3.2 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~bookworm_amd64.deb
postgresql-17-pgrdf 0.5.0 d12.aarch64 pigsty 2.7 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~bookworm_arm64.deb
postgresql-17-pgrdf 0.5.0 d13.x86_64 pigsty 3.2 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~trixie_amd64.deb
postgresql-17-pgrdf 0.5.0 d13.aarch64 pigsty 2.7 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~trixie_arm64.deb
postgresql-17-pgrdf 0.5.0 u22.x86_64 pigsty 3.5 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~jammy_amd64.deb
postgresql-17-pgrdf 0.5.0 u22.aarch64 pigsty 3.1 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~jammy_arm64.deb
postgresql-17-pgrdf 0.5.0 u24.x86_64 pigsty 3.5 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~noble_amd64.deb
postgresql-17-pgrdf 0.5.0 u24.aarch64 pigsty 3.1 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~noble_arm64.deb
postgresql-17-pgrdf 0.5.0 u26.x86_64 pigsty 3.5 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~resolute_amd64.deb
postgresql-17-pgrdf 0.5.0 u26.aarch64 pigsty 3.1 MiB postgresql-17-pgrdf_0.5.0-1PIGSTY~resolute_arm64.deb

Source

pig build pkg pgrdf;		# 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 pgrdf;		# install via package name, for the active PG version

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

Config this extension to shared_preload_libraries:

shared_preload_libraries = 'pgrdf';

Create this extension with:

CREATE EXTENSION pgrdf;

Usage

Sources: pgRDF upstream README, pgRDF user guide, local metadata.

pgRDF stores RDF data inside PostgreSQL and exposes SQL-callable helpers for Turtle/TriG/N-Quads loading, SPARQL query/update, named graphs, SHACL validation, and RDFS/OWL 2 RL materialization.

CREATE EXTENSION pgrdf;
SELECT pgrdf.version();

Preload And PostgreSQL Version Caveat

The local Pigsty metadata packages pgrdf for PostgreSQL 14, 15, 16, and 17 only. Upstream also documents PostgreSQL 14-17 support and defers PostgreSQL 18 while it remains pinned to pgrx 0.16.

pgrdf must be present in shared_preload_libraries before PostgreSQL starts. Without preload, upstream documents that the shared-memory dictionary and plan-cache atomics are not initialized and the first pgRDF call can fail.

shared_preload_libraries = 'pgrdf'

Restart PostgreSQL after changing this setting, then verify:

SHOW shared_preload_libraries;

SELECT pgrdf.parse_turtle(
  '@prefix ex: <http://example.org/> . ex:t a ex:T .',
  1::bigint,
  'http://example.org/'
);

Load RDF

Use parse_turtle for inline Turtle payloads and load_turtle for server-side files. Graph ids are bigint values; named graph helpers map ids to IRIs.

SELECT pgrdf.add_graph(100::bigint, 'http://example.org/graph/main');

SELECT pgrdf.parse_turtle(
  '@prefix ex: <http://example.org/> .
   ex:alice ex:knows ex:bob .
   ex:alice ex:name "Alice" .',
  100::bigint,
  'http://example.org/graph/main'
);

SELECT pgrdf.load_turtle('/srv/rdf/foaf.ttl', 100::bigint);
SELECT pgrdf.count_quads(100::bigint);

Related ingest and graph-management functions documented upstream include parse_trig, parse_nquads, add_graph, drop, clear, copy, move_graph, graph_id, and graph_iri.

Query With SPARQL

pgrdf.sparql(text) returns SPARQL results as SQL rows. The upstream v0.5 surface includes SELECT and ASK, filters, ordering, limits, OPTIONAL, UNION, MINUS, aggregates, VALUES, BIND, CONSTRUCT, DESCRIBE, named-graph GRAPH clauses, and property paths.

SELECT *
FROM pgrdf.sparql(
  'PREFIX ex: <http://example.org/>
   SELECT ?person ?name
   WHERE {
     ?person ex:name ?name .
     FILTER(REGEX(?name, "^A", "i"))
   }
   ORDER BY ?name
   LIMIT 20'
);

Named-graph queries can bind graph IRIs:

SELECT *
FROM pgrdf.sparql(
  'PREFIX ex: <http://example.org/>
   SELECT ?g (COUNT(*) AS ?n)
   WHERE { GRAPH ?g { ?s ex:name ?name } }
   GROUP BY ?g
   ORDER BY ?g'
);

Update Graphs

The upstream v0.5 surface includes SPARQL Update forms such as INSERT DATA, DELETE DATA, INSERT/DELETE WHERE, DELETE+INSERT WHERE, and graph lifecycle statements.

SELECT pgrdf.sparql(
  'PREFIX ex: <http://example.org/>
   INSERT DATA {
     GRAPH <http://example.org/graph/main> {
       ex:bob ex:name "Bob" .
     }
   }'
);

Reasoning And Validation

Use pgrdf.materialize(graph_id, profile) to write inferred triples for rdfs or owl-rl profiles. Materialization is intended to be repeatable; upstream documents that previous inferred rows are dropped before writing the new closure.

SELECT pgrdf.parse_turtle(
  '@prefix ex:   <http://example.com/> .
   @prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
   @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
   ex:Engineer rdfs:subClassOf ex:Person .
   ex:Person   rdfs:subClassOf ex:Agent .
   ex:alice    rdf:type        ex:Engineer .',
  100::bigint
);

SELECT pgrdf.materialize(100::bigint, 'owl-rl');

SELECT *
FROM pgrdf.sparql(
  'PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
   PREFIX ex:  <http://example.com/>
   SELECT ?class WHERE { ex:alice rdf:type ?class }'
);

Use pgrdf.validate(data, shapes, mode) for SHACL validation; upstream documents JSONB sh:ValidationReport output and native SHACL Core support. SHACL-SPARQL constraint execution is documented upstream as gated by its RDF library dependency, so treat mode => 'sparql' as an advanced surface to verify against the exact installed version.

Operational Helpers

Useful introspection and cache-management helpers documented upstream include:

Function Use
pgrdf.stats() Inspect runtime counters and cache state
pgrdf.shmem_reset() Reset shared-memory dictionary/cache state
pgrdf.plan_cache_clear() Clear prepared SPARQL plan cache
pgrdf.sparql_parse(text) Inspect parsed SPARQL without executing it

The pgrdf.path_max_depth setting guards property-path expansion depth.

Last updated on