\pset null '(null)' CREATE SERVER graphdb FOREIGN DATA WRAPPER rdf_fdw OPTIONS ( endpoint 'http://graphdb:7200/repositories/test', update_url 'http://graphdb:7200/repositories/test/statements'); CREATE FOREIGN TABLE ft ( subject rdfnode OPTIONS (variable '?s'), predicate rdfnode OPTIONS (variable '?p'), object rdfnode OPTIONS (variable '?o') ) SERVER graphdb OPTIONS ( log_sparql 'true', sparql 'SELECT * WHERE {?s ?p ?o}', sparql_update_pattern '?s ?p ?o .' ); CREATE USER MAPPING FOR postgres SERVER graphdb OPTIONS (user 'admin', password 'secret'); INSERT INTO ft (subject, predicate, object) VALUES ('', '', '"Westfälische Wilhelms-Universität Münster"@de'), ('', '', '"University of Münster"@en'), ('', '', '"Univerrrsity of Münsterrr"@en-US'), ('', '', '"Univêrsity of Münsta"@en-GB'), ('', '', '"18:18:42"^^'), ('', '', '"1780-04-16"^^'), ('', '', '"2025-12-24T18:30:42"^^'), ('', '', '"2025-12-24T13:00:42Z"^^'), ('', '', '"51.9636"^^'), ('', '', '"7.6136"^^'), ('', '', '"Johannes Wessels"'), ('', '', ''), ('', '', ''), ('', '', '"Hello 👋 PostgreSQL 🐘"@en'), ('', '', '"unknown literal type"^^'), ('', '', '"explicit string literal"^^'), ('', '', '""'), ('', '', '". <= pontos => ."@pt'), ('', '', '"\n <= salto de línea => \n"@es'), ('', '', '"\" <= double-quotes => \""@en'), ('', '', '"\t <= Tabulatorzeichen => \t"@de'), ('', '', '"1924"^^'), ('', '', '"49098"^^'), ('', '', '"4956"^^'), ('', '', '"803600000"^^'), ('', '', '"1500.00"^^'), ('', '', '"9999999999999999999"^^'), ('', '', '"0.000000000000001"^^'), ('', '', '"2024-02-29"^^'), ('', '', '"true"^^'); INFO: SPARQL query sent to 'graphdb': INSERT DATA { "Westfälische Wilhelms-Universität Münster"@de }; INSERT DATA { "University of Münster"@en }; INSERT DATA { "Univerrrsity of Münsterrr"@en-US }; INSERT DATA { "Univêrsity of Münsta"@en-GB }; INSERT DATA { "18:18:42"^^ }; INSERT DATA { "1780-04-16"^^ }; INSERT DATA { "2025-12-24T18:30:42"^^ }; INSERT DATA { "2025-12-24T13:00:42Z"^^ }; INSERT DATA { "51.9636"^^ }; INSERT DATA { "7.6136"^^ }; INSERT DATA { "Johannes Wessels" }; INSERT DATA { }; INSERT DATA { }; INSERT DATA { "Hello 👋 PostgreSQL 🐘"@en }; INSERT DATA { "unknown literal type"^^ }; INSERT DATA { "explicit string literal"^^ }; INSERT DATA { "" }; INSERT DATA { ". <= pontos => ."@pt }; INSERT DATA { "\n <= salto de línea => \n"@es }; INSERT DATA { "\" <= double-quotes => \""@en }; INSERT DATA { "\t <= Tabulatorzeichen => \t"@de }; INSERT DATA { "1924"^^ }; INSERT DATA { "49098"^^ }; INSERT DATA { "4956"^^ }; INSERT DATA { "803600000"^^ }; INSERT DATA { "1500.00"^^ }; INSERT DATA { "9999999999999999999"^^ }; INSERT DATA { "0.000000000000001"^^ }; INSERT DATA { "2024-02-29"^^ }; INSERT DATA { "true"^^ }; SELECT * FROM ft WHERE subject = '' ORDER BY predicate; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY ASC (?p) INFO: SPARQL returned 30 records. subject | predicate | object -------------------------------+---------------------------------------------------+--------------------------------------------------------------------- | | "true"^^ | | "2024-02-29"^^ | | "2025-12-24T13:00:42Z"^^ | | "4956"^^ | | "1924"^^ | | "803600000"^^ | | | | "1780-04-16"^^ | | "2025-12-24T18:30:42"^^ | | "University of Münster"@en | | "Westfälische Wilhelms-Universität Münster"@de | | "Univerrrsity of Münsterrr"@en-US | | "Univêrsity of Münsta"@en-GB | | "Johannes Wessels" | | | | "49098"^^ | | "1500.00"^^ | | "9999999999999999999"^^ | | "0.000000000000001"^^ | | "" | | "Hello 👋 PostgreSQL 🐘"@en | | "unknown literal type"^^ | | "explicit string literal" | | ". <= pontos => ."@pt | | " + | | <= salto de línea => + | | "@es | | "\" <= double-quotes => \""@en | | " <= Tabulatorzeichen => "@de | | "18:18:42"^^ | | "51.9636"^^ | | "7.6136"^^ (30 rows) /* SPARQL 17.4.1.7 - RDFterm-equal */ SELECT * FROM ft WHERE sparql.sameterm(object, sparql.iri('http://dbpedia.org/resource/North_Rhine-Westphalia')); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(SAMETERM(?o, )) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------+------------------------------------------------------ | | (1 row) /* SPARQL 17.4.1.9 - IN */ SELECT * FROM ft WHERE object IN (sparql.iri('http://dbpedia.org/resource/North_Rhine-Westphalia'), sparql.iri('http://dbpedia.org/resource/Münster')); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o IN (, )) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------+------------------------------------------------------ | | | | (2 rows) CREATE TEMPORARY TABLE tmp (c rdfnode, o rdfnode); INSERT INTO tmp (c, o) VALUES (8036::rdfnode,''); SELECT * FROM ft WHERE object IN (SELECT o FROM tmp); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o} INFO: SPARQL returned 144 records. subject | predicate | object -------------------------------+-------------------------------------+------------------------------------------------------ | | (1 row) SELECT ft.* FROM ft, tmp WHERE object IN (tmp.o, 'Some Other Literal'::rdfnode, sparql.strdt(sparql.concat(tmp.c, '00000'::rdfnode), 'http://www.w3.org/2001/XMLSchema#long')) AND subject = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } INFO: SPARQL returned 30 records. subject | predicate | object -------------------------------+--------------------------------------+------------------------------------------------------ | | | | "803600000"^^ (2 rows) /* SPARQL 17.4.1.10 - NOT IN */ SELECT * FROM ft WHERE subject = '' AND predicate NOT IN ('', ''); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) FILTER(?p NOT IN (, )) } INFO: SPARQL returned 18 records. subject | predicate | object -------------------------------+---------------------------------------------------+--------------------------------------------------------------------- | | "51.9636"^^ | | "7.6136"^^ | | "18:18:42"^^ | | "1780-04-16"^^ | | "2025-12-24T18:30:42"^^ | | "2025-12-24T13:00:42Z"^^ | | "Johannes Wessels" | | | | | | "1924"^^ | | "49098"^^ | | "4956"^^ | | "803600000"^^ | | "1500.00"^^ | | "9999999999999999999"^^ | | "0.000000000000001"^^ | | "2024-02-29"^^ | | "true"^^ (18 rows) /* SPARQL 18.2.5.3 - DISTINCT */ SELECT DISTINCT predicate FROM ft ORDER BY predicate; INFO: SPARQL query sent to 'graphdb': SELECT DISTINCT ?p {?s ?p ?o} ORDER BY ASC (?p) INFO: SPARQL returned 27 records. predicate ---------------------------------------------------------- (27 rows) SELECT DISTINCT object FROM ft WHERE sparql.lang(object) = 'de'; INFO: SPARQL query sent to 'graphdb': SELECT DISTINCT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LANG(?o) = "de") } ORDER BY ASC (?o) INFO: SPARQL returned 2 records. object ------------------------------------------------ " <= Tabulatorzeichen => "@de "Westfälische Wilhelms-Universität Münster"@de (2 rows) /* SPARQL 15.5 - LIMIT */ SELECT * FROM ft WHERE subject = '' FETCH FIRST ROW ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } LIMIT 1 INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+-------- | | "" (1 row) SELECT * FROM ft WHERE subject = '' FETCH FIRST 3 ROWS ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } LIMIT 3 INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+-------------------------------------------------------------------- | | "" | | "Hello 👋 PostgreSQL 🐘"@en | | "unknown literal type"^^ (3 rows) SELECT * FROM ft WHERE subject = '' LIMIT 3; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } LIMIT 3 INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+-------------------------------------------------------------------- | | "" | | "Hello 👋 PostgreSQL 🐘"@en | | "unknown literal type"^^ (3 rows) /* SPARQL 15.4 - OFFSET */ SELECT * FROM ft WHERE subject = '' OFFSET 2 FETCH FIRST 3 ROWS ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } LIMIT 5 INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+------------------------------------------------+-------------------------------------------------------------------- | | "unknown literal type"^^ | | "explicit string literal" | | ". <= pontos => ."@pt (3 rows) SELECT * FROM ft WHERE subject = '' OFFSET 2 LIMIT 3; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } LIMIT 5 INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+------------------------------------------------+-------------------------------------------------------------------- | | "unknown literal type"^^ | | "explicit string literal" | | ". <= pontos => ."@pt (3 rows) /* SPARQL 15.1 - ORDER BY */ SELECT * FROM ft WHERE subject = '' ORDER BY object ASC FETCH FIRST 3 ROWS ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY ASC (?o) LIMIT 3 INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ | | | | (3 rows) SELECT * FROM ft WHERE subject = '' ORDER BY object DESC FETCH FIRST 3 ROWS ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY DESC (?o) LIMIT 3 INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+--------------------------- | | "explicit string literal" | | "Johannes Wessels" | | "" (3 rows) SELECT * FROM ft WHERE subject = '' ORDER BY object, predicate FETCH FIRST 3 ROWS ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY ASC (?o) ASC (?p) LIMIT 3 INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ | | | | (3 rows) SELECT * FROM ft WHERE subject = '' ORDER BY object DESC, predicate ASC FETCH FIRST 3 ROWS ONLY; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY DESC (?o) ASC (?p) LIMIT 3 INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+--------------------------- | | "explicit string literal" | | "Johannes Wessels" | | "" (3 rows) /* SPARQL 18.2.5.3 - DISTINCT */ SELECT DISTINCT subject FROM ft WHERE subject = sparql.iri('https://www.uni-muenster.de'); INFO: SPARQL query sent to 'graphdb': SELECT DISTINCT ?s {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY ASC (?s) INFO: SPARQL returned 1 record. subject ------------------------------- (1 row) SELECT DISTINCT ON (predicate) predicate, object -- DISTINCT ON not supported in SPARQL FROM ft WHERE subject = sparql.iri('https://www.uni-muenster.de'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } ORDER BY ASC (?p) INFO: SPARQL returned 30 records. predicate | object ---------------------------------------------------+--------------------------------------------------------------------- | "true"^^ | "2024-02-29"^^ | "2025-12-24T13:00:42Z"^^ | "4956"^^ | "1924"^^ | "803600000"^^ | | "1780-04-16"^^ | "2025-12-24T18:30:42"^^ | "University of Münster"@en | "Johannes Wessels" | | "49098"^^ | "1500.00"^^ | "9999999999999999999"^^ | "0.000000000000001"^^ | "" | "18:18:42"^^ | "51.9636"^^ | "7.6136"^^ (20 rows) /* SPARQL - 17.3 Operator Mapping (text) */ SELECT * FROM ft WHERE predicate = '' AND sparql.str(object) >= 'Westfälische' AND sparql.str(object) <= 'Westfälische ZZZ' AND sparql.str(object) BETWEEN 'Westfälische' AND 'Westfälische ZZZ'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(STR(?o) >= "Westfälische") FILTER(STR(?o) <= "Westfälische ZZZ") FILTER(STR(?o) >= "Westfälische") FILTER(STR(?o) <= "Westfälische ZZZ") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL - 17.3 Operator Mapping (rdfnode) */ SELECT * FROM ft WHERE predicate = ''::rdfnode AND sparql.str(object) >= 'Westfälische'::rdfnode AND sparql.str(object) <= 'Westfälische ZZZ'::rdfnode AND sparql.str(object) BETWEEN 'Westfälische'::rdfnode AND 'Westfälische ZZZ'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(STR(?o) >= "Westfälische") FILTER(STR(?o) <= "Westfälische ZZZ") FILTER(STR(?o) >= "Westfälische") FILTER(STR(?o) <= "Westfälische ZZZ") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL - 17.3 Operator Mapping (rdfnode, plain literal) */ SELECT * FROM ft WHERE object = 'Johannes Wessels'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "Johannes Wessels") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+--------------------------------------+-------------------- | | "Johannes Wessels" (1 row) /* SPARQL - 17.3 Operator Mapping (rdfnode, typed literal) */ SELECT * FROM ft WHERE object = sparql.strdt('Johannes Wessels', 'http://www.w3.org/2001/XMLSchema#string'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "Johannes Wessels"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+--------------------------------------+-------------------- | | "Johannes Wessels" (1 row) /* SPARQL - 17.3 Operator Mapping (smallint) */ SELECT * FROM ft WHERE object = 1924::smallint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = 1924) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+---------------------------------------------------+-------------------------------------------------- | | "1924"^^ (1 row) SELECT * FROM ft WHERE object > 1900::smallint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > 1900) } INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+---------------------------------------------------+------------------------------------------------------------------- | | "1924"^^ | | "4956"^^ | | "49098"^^ | | "803600000"^^ | | "9999999999999999999"^^ (5 rows) SELECT * FROM ft WHERE object < 2000::smallint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < 2000) } INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+---------------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ | | "7.6136"^^ | | "51.9636"^^ | | "1500.00"^^ | | "1924"^^ (5 rows) SELECT * FROM ft WHERE object BETWEEN 1900::smallint AND 2000::smallint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= 1900) FILTER(?o <= 2000) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+---------------------------------------------------+-------------------------------------------------- | | "1924"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (int) */ SELECT * FROM ft WHERE object = 49098::int; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = 49098) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+----------------------------------------+------------------------------------------------- | | "49098"^^ (1 row) SELECT * FROM ft WHERE object > 40000::int; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > 40000) } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+-----------------------------------------------+------------------------------------------------------------------- | | "49098"^^ | | "803600000"^^ | | "9999999999999999999"^^ (3 rows) SELECT * FROM ft WHERE object < 60000::int; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < 60000) } INFO: SPARQL returned 7 records. subject | predicate | object -------------------------------+---------------------------------------------------+----------------------------------------------------------------- | | "51.9636"^^ | | "7.6136"^^ | | "1924"^^ | | "49098"^^ | | "4956"^^ | | "1500.00"^^ | | "0.000000000000001"^^ (7 rows) SELECT * FROM ft WHERE object BETWEEN 40000::int AND 60000::int; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= 40000) FILTER(?o <= 60000) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+----------------------------------------+------------------------------------------------- | | "49098"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (bigint) */ SELECT * FROM ft WHERE object = 803600000::bigint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = 803600000) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+--------------------------------------+------------------------------------------------------ | | "803600000"^^ (1 row) SELECT * FROM ft WHERE object > 800000000::bigint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > 800000000) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-----------------------------------------------+------------------------------------------------------------------- | | "803600000"^^ | | "9999999999999999999"^^ (2 rows) SELECT * FROM ft WHERE object < 900000000::bigint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < 900000000) } INFO: SPARQL returned 8 records. subject | predicate | object -------------------------------+---------------------------------------------------+----------------------------------------------------------------- | | "51.9636"^^ | | "7.6136"^^ | | "1924"^^ | | "49098"^^ | | "4956"^^ | | "803600000"^^ | | "1500.00"^^ | | "0.000000000000001"^^ (8 rows) SELECT * FROM ft WHERE object BETWEEN 800000000::bigint AND 900000000::bigint; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= 800000000) FILTER(?o <= 900000000) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+--------------------------------------+------------------------------------------------------ | | "803600000"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (real) */ SELECT * FROM ft WHERE object = 51.9636::real; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = 51.9636) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) SELECT * FROM ft WHERE object > 50.0::real; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > 50) } INFO: SPARQL returned 7 records. subject | predicate | object -------------------------------+---------------------------------------------------+------------------------------------------------------------------- | | "51.9636"^^ | | "1500.00"^^ | | "1924"^^ | | "4956"^^ | | "49098"^^ | | "803600000"^^ | | "9999999999999999999"^^ (7 rows) SELECT * FROM ft WHERE object < 52.0::real; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < 52) } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ | | "7.6136"^^ | | "51.9636"^^ (3 rows) SELECT * FROM ft WHERE object BETWEEN 50.0::real AND 52.0::real; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= 50) FILTER(?o <= 52) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (double precision) */ SELECT * FROM ft WHERE object = 51.9636::double precision; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = 51.9636) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) SELECT * FROM ft WHERE object > 50.0::double precision; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > 50) } INFO: SPARQL returned 7 records. subject | predicate | object -------------------------------+---------------------------------------------------+------------------------------------------------------------------- | | "51.9636"^^ | | "1500.00"^^ | | "1924"^^ | | "4956"^^ | | "49098"^^ | | "803600000"^^ | | "9999999999999999999"^^ (7 rows) SELECT * FROM ft WHERE object < 52.0::double precision; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < 52) } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ | | "7.6136"^^ | | "51.9636"^^ (3 rows) SELECT * FROM ft WHERE object BETWEEN 50.0::double precision AND 52.0::double precision; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= 50) FILTER(?o <= 52) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (numeric) */ SELECT * FROM ft WHERE object = 51.9636::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "51.9636"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) SELECT * FROM ft WHERE object > 50.0::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > "50.0"^^) } INFO: SPARQL returned 7 records. subject | predicate | object -------------------------------+---------------------------------------------------+------------------------------------------------------------------- | | "51.9636"^^ | | "1500.00"^^ | | "1924"^^ | | "4956"^^ | | "49098"^^ | | "803600000"^^ | | "9999999999999999999"^^ (7 rows) SELECT * FROM ft WHERE object < 52.0::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < "52.0"^^) } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ | | "7.6136"^^ | | "51.9636"^^ (3 rows) SELECT * FROM ft WHERE object BETWEEN 50.0::numeric::rdfnode AND 52.0::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= "50.0"^^) FILTER(?o <= "52.0"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (timestamp) */ SELECT * FROM ft WHERE object = '2025-12-24 18:30:42'::timestamp; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "2025-12-24T18:30:42"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+----------------------------------------+-------------------------------------------------------------------- | | "2025-12-24T18:30:42"^^ (1 row) SELECT * FROM ft WHERE object > '2025-01-01 00:00:00'::timestamp; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > "2025-01-01T00:00:00"^^) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (2 rows) SELECT * FROM ft WHERE object < '2025-12-31 23:59:59'::timestamp; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < "2025-12-31T23:59:59"^^) } INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "1780-04-16"^^ | | "18:18:42"^^ | | "2024-02-29"^^ | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (5 rows) SELECT * FROM ft WHERE object BETWEEN '2025-01-01 00:00:00'::timestamp AND '2025-12-31 23:59:59'::timestamp; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= "2025-01-01T00:00:00"^^) FILTER(?o <= "2025-12-31T23:59:59"^^) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (2 rows) /* SPARQL - 17.3 Operator Mapping (timestamptz) */ SELECT * FROM ft WHERE object = '"2025-12-24T13:00:42+00:00"^^'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "2025-12-24T13:00:42+00:00"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ (1 row) SELECT * FROM ft WHERE object > '"2025-01-01T00:00:00+00:00"^^'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > "2025-01-01T00:00:00+00:00"^^) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (2 rows) SELECT * FROM ft WHERE object < '"2025-12-31T23:59:59+00:00"^^'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < "2025-12-31T23:59:59+00:00"^^) } INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "1780-04-16"^^ | | "18:18:42"^^ | | "2024-02-29"^^ | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (5 rows) SELECT * FROM ft WHERE object BETWEEN '"2025-01-01T00:00:00+00:00"^^'::rdfnode AND '"2025-12-31T23:59:59+00:00"^^'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= "2025-01-01T00:00:00+00:00"^^) FILTER(?o <= "2025-12-31T23:59:59+00:00"^^) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (2 rows) /* SPARQL - 17.3 Operator Mapping (date) */ SELECT * FROM ft WHERE object = '1780-04-16'::date; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "1780-04-16"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) SELECT * FROM ft WHERE object > '1780-01-01'::date; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > "1780-01-01"^^) } INFO: SPARQL returned 4 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "1780-04-16"^^ | | "2024-02-29"^^ | | "2025-12-24T13:00:42Z"^^ | | "2025-12-24T18:30:42"^^ (4 rows) SELECT * FROM ft WHERE object < '1780-12-31'::date; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < "1780-12-31"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) SELECT * FROM ft WHERE object BETWEEN '1780-01-01'::date AND '1780-12-31'::date; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= "1780-01-01"^^) FILTER(?o <= "1780-12-31"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (time) */ SELECT * FROM ft WHERE object = '18:18:42'::time; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "18:18:42"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+---------------------------------------------+----------------------------------------------------- | | "18:18:42"^^ (1 row) SELECT * FROM ft WHERE object > '12:00:00'::time; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o > "12:00:00"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+---------------------------------------------+----------------------------------------------------- | | "18:18:42"^^ (1 row) SELECT * FROM ft WHERE object < '23:59:59'::time; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o < "23:59:59"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+---------------------------------------------+----------------------------------------------------- | | "18:18:42"^^ (1 row) SELECT * FROM ft WHERE object BETWEEN '12:00:00'::time AND '23:59:59'::time; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= "12:00:00"^^) FILTER(?o <= "23:59:59"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+---------------------------------------------+----------------------------------------------------- | | "18:18:42"^^ (1 row) /* SPARQL - 17.3 Operator Mapping (timetz) */ /* SPARQL - 17.3 Operator Mapping (boolean) */ SELECT * FROM ft WHERE predicate = '' AND object = '"true"^^'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(?o = "true"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+---------------------------------------------------- | | "true"^^ (1 row) SELECT * FROM ft WHERE predicate = '' AND object <> '"false"^^'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(?o != "false"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+---------------------------------------------------- | | "true"^^ (1 row) SELECT * FROM ft WHERE predicate = '' AND object = true; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(?o = "true"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+---------------------------------------------------- | | "true"^^ (1 row) SELECT * FROM ft WHERE predicate = '' AND object <> false; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(?o != "false"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+---------------------------------------------------- | | "true"^^ (1 row) --===================================================================================-- /* SPARQL 17.4.1.1 - BOUND */ /* Note: Testing NOT BOUND requires OPTIONAL patterns, skipping for simple triple pattern */ -- SELECT * FROM ft -- WHERE NOT sparql.bound(object); /* SPARQL 17.4.1.3 - COALESCE */ SELECT * FROM ft WHERE sparql.coalesce(object, '"Default Value"') = '"Westfälische Wilhelms-Universität Münster"@de'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(COALESCE(?o, "Default Value") = "Westfälische Wilhelms-Universität Münster"@de) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.1.8 - sameTerm */ SELECT * FROM ft WHERE sparql.sameterm(object, '1780-04-16'::date::rdfnode); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(SAMETERM(?o, "1780-04-16"^^)) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) /* SPARQL 17.4.2.1 - isIRI */ SELECT * FROM ft WHERE sparql.isiri(object) AND predicate = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(isIRI(?o)) FILTER(?p = ) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------+------------------------------------------------------ | | (1 row) /* SPARQL 17.4.2.2 - isBlank */ SELECT * FROM ft WHERE sparql.isblank(subject); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISBLANK(?s)) } INFO: SPARQL returned 0 records. subject | predicate | object ---------+-----------+-------- (0 rows) /* SPARQL 17.4.2.3 - isLiteral */ SELECT * FROM ft WHERE sparql.isliteral(object) ORDER BY predicate; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISLITERAL(?o)) } ORDER BY ASC (?p) INFO: SPARQL returned 28 records. subject | predicate | object -------------------------------+---------------------------------------------------+--------------------------------------------------------------------- | | "true"^^ | | "2024-02-29"^^ | | "2025-12-24T13:00:42Z"^^ | | "4956"^^ | | "1924"^^ | | "803600000"^^ | | "1780-04-16"^^ | | "2025-12-24T18:30:42"^^ | | "University of Münster"@en | | "Westfälische Wilhelms-Universität Münster"@de | | "Univerrrsity of Münsterrr"@en-US | | "Univêrsity of Münsta"@en-GB | | "Johannes Wessels" | | "49098"^^ | | "1500.00"^^ | | "9999999999999999999"^^ | | "0.000000000000001"^^ | | "" | | "Hello 👋 PostgreSQL 🐘"@en | | "unknown literal type"^^ | | "explicit string literal" | | ". <= pontos => ."@pt | | " + | | <= salto de línea => + | | "@es | | "\" <= double-quotes => \""@en | | " <= Tabulatorzeichen => "@de | | "18:18:42"^^ | | "51.9636"^^ | | "7.6136"^^ (28 rows) /* SPARQL 17.4.2.4 - isNumeric */ SELECT * FROM ft WHERE sparql.isnumeric(object); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISNUMERIC(?o)) } INFO: SPARQL returned 9 records. subject | predicate | object -------------------------------+---------------------------------------------------+------------------------------------------------------------------- | | "51.9636"^^ | | "7.6136"^^ | | "1924"^^ | | "49098"^^ | | "4956"^^ | | "803600000"^^ | | "1500.00"^^ | | "9999999999999999999"^^ | | "0.000000000000001"^^ (9 rows) /* SPARQL 17.4.2.5 - str */ SELECT * FROM ft WHERE sparql.str(object) = 'Westfälische Wilhelms-Universität Münster'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(STR(?o) = "Westfälische Wilhelms-Universität Münster") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.2.6 - lang */ SELECT * FROM ft WHERE sparql.lang(object) = 'de'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LANG(?o) = "de") } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+------------------------------------------------+------------------------------------------------ | | " <= Tabulatorzeichen => "@de | | "Westfälische Wilhelms-Universität Münster"@de (2 rows) /* SPARQL 17.4.2.7 - datatype */ SELECT * FROM ft WHERE sparql.datatype(object) = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(DATATYPE(?o) = ) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ | | "2024-02-29"^^ (2 rows) /* SPARQL 17.4.2.8 - IRI */ SELECT * FROM ft WHERE sparql.iri('http://dbpedia.org/resource/Münster') = object; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER( = ?o) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+--------------------------------------- | | (1 row) /* SPARQL 17.4.2.9 - BNODE */ SELECT * FROM ft WHERE sparql.bnode('_:bnode1') != subject LIMIT 1; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER("_:bnode1" != ?s) } LIMIT 1 INFO: SPARQL returned 1 record. subject | predicate | object ---------------------------------------------------+---------------------------------------------------+------------------------------------------------------- | | (1 row) /* SPARQL 17.4.2.10 - STRDT */ SELECT * FROM ft WHERE sparql.strdt('1780-04-16', 'http://www.w3.org/2001/XMLSchema#date') = object; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER("1780-04-16"^^ = ?o) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) /* SPARQL 17.4.2.11 - STRLANG */ SELECT * FROM ft WHERE sparql.strlang('Westfälische Wilhelms-Universität Münster', 'de') = object; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER("Westfälische Wilhelms-Universität Münster"@de = ?o) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.3.2 - STRLEN */ SELECT * FROM ft WHERE predicate = '' AND sparql.strlen(sparql.str(object)) >= 25; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(STRLEN(STR(?o)) >= 25) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+---------------------------------------------- | | " <= Tabulatorzeichen => "@de (1 row) SELECT * FROM ft WHERE predicate = '' AND sparql.strlen(object) = 20; -- emoji counts as 1 char each INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(STRLEN(?o) = 20) } INFO: SPARQL returned 0 records. subject | predicate | object ---------+-----------+-------- (0 rows) /* SPARQL 17.4.3.3 - SUBSTR */ SELECT * FROM ft WHERE sparql.substr(sparql.str(object), 1, 9) = 'Westfälis'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(SUBSTR(STR(?o), 1, 9) = "Westfälis") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) SELECT * FROM ft WHERE sparql.substr(object, 7, 2) = sparql.strlang('👋 ','en'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(SUBSTR(?o, 7, 2) = "👋 "@en) } INFO: SPARQL returned 0 records. subject | predicate | object ---------+-----------+-------- (0 rows) /* SPARQL 17.4.3.4 - UCASE */ SELECT * FROM ft WHERE sparql.ucase(object) = sparql.strlang('WESTFÄLISCHE WILHELMS-UNIVERSITÄT MÜNSTER', 'de'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(UCASE(?o) = "WESTFÄLISCHE WILHELMS-UNIVERSITÄT MÜNSTER"@de) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.3.5 - LCASE */ SELECT * FROM ft WHERE sparql.lcase(object) = sparql.strlang('westfälische wilhelms-universität münster', 'de'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LCASE(?o) = "westfälische wilhelms-universität münster"@de) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.3.6 - STRSTARTS */ SELECT * FROM ft WHERE sparql.strstarts(sparql.str(object), 'Westfäl'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(STRSTARTS(STR(?o), "Westfäl")) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.3.7 - STRENDS */ SELECT * FROM ft WHERE sparql.strends(sparql.str(object), 'Münster'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(STRENDS(STR(?o), "Münster")) } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "University of Münster"@en | | "Westfälische Wilhelms-Universität Münster"@de | | (3 rows) /* SPARQL 17.4.3.8 - CONTAINS */ SELECT * FROM ft WHERE sparql.contains(object, '"Wilhelms"@de'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CONTAINS(?o, "Wilhelms"@de)) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) SELECT * FROM ft WHERE sparql.contains(object, E'"\t <= Tabulator"@de'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CONTAINS(?o, "\t <= Tabulator"@de)) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+---------------------------------------------- | | " <= Tabulatorzeichen => "@de (1 row) SELECT * FROM ft WHERE sparql.contains(object, '". <= pontos"@pt'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CONTAINS(?o, ". <= pontos"@pt)) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+----------------------- | | ". <= pontos => ."@pt (1 row) SELECT * FROM ft WHERE sparql.contains(object, E'"\n <= salto"@es'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CONTAINS(?o, "\n <= salto"@es)) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+------------------------ | | " + | | <= salto de línea => + | | "@es (1 row) SELECT * FROM ft WHERE sparql.contains(object, '"\" <= double"@en'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CONTAINS(?o, "\" <= double"@en)) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+-------------------------------- | | "\" <= double-quotes => \""@en (1 row) /* SPARQL 17.4.3.9 - STRBEFORE */ SELECT * FROM ft WHERE sparql.strbefore(sparql.str(object), ' Wilhelms') = 'Westfälische'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(STRBEFORE(STR(?o), " Wilhelms") = "Westfälische") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) SELECT * FROM ft WHERE predicate = '' AND sparql.strbefore(object, 'NOTFOUND') = '""'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(STRBEFORE(?o, "NOTFOUND") = "") } INFO: SPARQL returned 7 records. subject | predicate | object -------------------------------+------------------------------------------------+---------------------------------------------- | | "" | | "Hello 👋 PostgreSQL 🐘"@en | | "explicit string literal" | | ". <= pontos => ."@pt | | " + | | <= salto de línea => + | | "@es | | "\" <= double-quotes => \""@en | | " <= Tabulatorzeichen => "@de (7 rows) /* SPARQL 17.4.3.10 - STRAFTER */ SELECT * FROM ft WHERE sparql.strafter(sparql.str(object), 'Westfälische ') = 'Wilhelms-Universität Münster'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(STRAFTER(STR(?o), "Westfälische ") = "Wilhelms-Universität Münster") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) SELECT * FROM ft WHERE predicate = '' AND sparql.strafter(object, 'NOTFOUND') = '""'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(STRAFTER(?o, "NOTFOUND") = "") } INFO: SPARQL returned 7 records. subject | predicate | object -------------------------------+------------------------------------------------+---------------------------------------------- | | "" | | "Hello 👋 PostgreSQL 🐘"@en | | "explicit string literal" | | ". <= pontos => ."@pt | | " + | | <= salto de línea => + | | "@es | | "\" <= double-quotes => \""@en | | " <= Tabulatorzeichen => "@de (7 rows) /* SPARQL 17.4.3.11 - ENCODE_FOR_URI */ SELECT * FROM ft WHERE sparql.encode_for_uri(sparql.str(object)) = 'Westf%C3%A4lische%20Wilhelms-Universit%C3%A4t%20M%C3%BCnster'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ENCODE_FOR_URI(STR(?o)) = "Westf%C3%A4lische%20Wilhelms-Universit%C3%A4t%20M%C3%BCnster") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.3.12 - CONCAT */ SELECT * FROM ft WHERE sparql.concat(sparql.str(object), ', Deutschland') = 'Westfälische Wilhelms-Universität Münster, Deutschland'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CONCAT(STR(?o), ", Deutschland") = "Westfälische Wilhelms-Universität Münster, Deutschland") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) SELECT *, sparql.concat(object, ', ', '"Cześć"@pl') FROM ft WHERE predicate = '' AND sparql.concat(object, ', ', '"Cześć"@pl'::rdfnode) = '"Hello 👋 PostgreSQL 🐘, Cześć"'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(CONCAT(?o, ", ", "Cześć"@pl) = "Hello 👋 PostgreSQL 🐘, Cześć") } INFO: SPARQL returned 1 record. subject | predicate | object | concat -------------------------------+------------------------------------------------+-----------------------------+--------------------------------- | | "Hello 👋 PostgreSQL 🐘"@en | "Hello 👋 PostgreSQL 🐘, Cześć" (1 row) /* Note: CONCAT on unknown datatype doesn't preserve the datatype in SPARQL */ SELECT sparql.concat(object, ', ', 'after concat'::rdfnode) FROM ft WHERE predicate = '' AND sparql.datatype(object) = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(DATATYPE(?o) = ) } INFO: SPARQL returned 1 record. concat -------------------------------------- "unknown literal type, after concat" (1 row) SELECT *, sparql.concat(object, ', ', 'after concat'::rdfnode) FROM ft WHERE predicate = '' AND sparql.datatype(object) = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(DATATYPE(?o) = ) } INFO: SPARQL returned 2 records. subject | predicate | object | concat -------------------------------+------------------------------------------------+---------------------------+----------------------------------------- | | "" | ", after concat" | | "explicit string literal" | "explicit string literal, after concat" (2 rows) SELECT object, sparql.datatype(object) FROM ft WHERE predicate = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) } INFO: SPARQL returned 8 records. object | datatype --------------------------------------------------------------------+--------------------------------------------------------- "" | "Hello 👋 PostgreSQL 🐘"@en | "unknown literal type"^^ | "explicit string literal" | ". <= pontos => ."@pt | " +| <= salto de línea => +| "@es | "\" <= double-quotes => \""@en | " <= Tabulatorzeichen => "@de | (8 rows) /* SPARQL 17.4.3.13 - langMatches */ SELECT * FROM ft WHERE sparql.langmatches(sparql.lang(object), 'de'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LANGMATCHES(LANG(?o), "de")) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+------------------------------------------------+------------------------------------------------ | | " <= Tabulatorzeichen => "@de | | "Westfälische Wilhelms-Universität Münster"@de (2 rows) SELECT * FROM ft WHERE sparql.langmatches(sparql.lang(object), 'en'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LANGMATCHES(LANG(?o), "en")) } INFO: SPARQL returned 5 records. subject | predicate | object -------------------------------+------------------------------------------------+----------------------------------- | | "Hello 👋 PostgreSQL 🐘"@en | | "\" <= double-quotes => \""@en | | "University of Münster"@en | | "Univerrrsity of Münsterrr"@en-US | | "Univêrsity of Münsta"@en-GB (5 rows) SELECT * FROM ft WHERE sparql.langmatches(sparql.lang(object), 'en-US'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LANGMATCHES(LANG(?o), "en-US")) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+----------------------------------- | | "Univerrrsity of Münsterrr"@en-US (1 row) SELECT * FROM ft WHERE sparql.langmatches(sparql.lang(object), 'en-*'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(LANGMATCHES(LANG(?o), "en-*")) } INFO: SPARQL returned 0 records. subject | predicate | object ---------+-----------+-------- (0 rows) /* SPARQL 17.4.3.15 - REPLACE */ SELECT * FROM ft WHERE sparql.replace(sparql.str(object), 'Westfälische Wilhelms-Universität', 'WWU') = 'WWU Münster'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(REPLACE(STR(?o), "Westfälische Wilhelms-Universität", "WWU") = "WWU Münster") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL 17.4.4.1 - abs */ SELECT * FROM ft WHERE sparql.abs(object) = 51.9636::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ABS(?o) = "51.9636"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL 17.4.4.2 - round */ SELECT * FROM ft WHERE sparql.round(object) = 52::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ROUND(?o) = "52"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL 17.4.4.3 - ceil */ SELECT * FROM ft WHERE sparql.ceil(object) = 52::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(CEIL(?o) = "52"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL 17.4.4.4 - floor */ SELECT * FROM ft WHERE sparql.floor(object) = 51::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(FLOOR(?o) = "51"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------- | | "51.9636"^^ (1 row) /* SPARQL 17.4.4.5 - RAND */ SELECT setseed(0.42); setseed --------- (1 row) SELECT sparql.lex(sparql.rand())::numeric BETWEEN 0.0 AND 1.0, sparql.datatype(sparql.rand()) = ''; ?column? | ?column? ----------+---------- t | t (1 row) /* SPARQL 17.4.5.2 - year */ SELECT * FROM ft WHERE sparql.year(object) = 1780::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(YEAR(?o) = "1780"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) SELECT * FROM ft WHERE sparql.year(object) + 1 = 2026; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(YEAR(?o) + 1 = 2026) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T18:30:42"^^ | | "2025-12-24T13:00:42Z"^^ (2 rows) /* SPARQL 17.4.5.3 - month */ SELECT * FROM ft WHERE sparql.month(object) = 4::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(MONTH(?o) = "4"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) /* SPARQL 17.4.5.4 - day */ SELECT * FROM ft WHERE sparql.day(object) = 16::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(DAY(?o) = "16"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "1780-04-16"^^ (1 row) /* SPARQL 7.4.5.5 - hours */ SELECT * FROM ft WHERE sparql.hours(object) = 18::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(HOURS(?o) = "18"^^) } INFO: SPARQL returned 2 records. subject | predicate | object -------------------------------+---------------------------------------------+-------------------------------------------------------------------- | | "18:18:42"^^ | | "2025-12-24T18:30:42"^^ (2 rows) /* SPARQL 17.4.5.6 - minutes */ SELECT * FROM ft WHERE sparql.minutes(object) = 30::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(MINUTES(?o) = "30"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+----------------------------------------+-------------------------------------------------------------------- | | "2025-12-24T18:30:42"^^ (1 row) /* SPARQL 17.4.5.7 - seconds */ SELECT * FROM ft WHERE sparql.seconds(object) = 42::numeric::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(SECONDS(?o) = "42"^^) } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "18:18:42"^^ | | "2025-12-24T18:30:42"^^ | | "2025-12-24T13:00:42Z"^^ (3 rows) /* SPARQL 17.4.5.8 - timezone */ SELECT * FROM ft WHERE sparql.timezone(object) = '"PT0S"^^'; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(TIMEZONE(?o) = "PT0S"^^) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ (1 row) /* SPARQL 17.4.5.9 - tz */ SELECT * FROM ft WHERE sparql.tz(object) = 'Z'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(TZ(?o) = "Z") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "2025-12-24T13:00:42Z"^^ (1 row) /* SPARQL 17.4.6.1 - MD5 */ SELECT * FROM ft WHERE sparql.md5(sparql.str(object)) = '6c0bdbd38fc0772abda6fa1c98b74990'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(MD5(STR(?o)) = "6c0bdbd38fc0772abda6fa1c98b74990") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) /* SPARQL Aggregate SUM */ SELECT sparql.sum(object) AS obj_count FROM ft WHERE sparql.isnumeric(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISNUMERIC(?o)) } INFO: SPARQL returned 9 records. obj_count ----------------------------------------------------------------------------------- "10000000000803657536.577200000000001"^^ (1 row) /* SPARQL Aggregate AVG */ SELECT sparql.avg(object) AS obj_avg FROM ft WHERE sparql.isnumeric(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISNUMERIC(?o)) } INFO: SPARQL returned 9 records. obj_avg ---------------------------------------------------------------------------------- "1111111111200406392.953022222222222"^^ (1 row) /* SPARQL Aggregate MIN */ SELECT sparql.min(object) AS obj_min FROM ft WHERE sparql.isnumeric(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISNUMERIC(?o)) } INFO: SPARQL returned 9 records. obj_min ----------------------------------------------------------------- "0.000000000000001"^^ (1 row) /* SPARQL Aggregate MAX */ SELECT sparql.max(object) AS obj_max FROM ft WHERE sparql.isnumeric(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISNUMERIC(?o)) } INFO: SPARQL returned 9 records. obj_max ------------------------------------------------------------------- "9999999999999999999"^^ (1 row) /* SPARQL Aggregate GROUP_CONCAT */ SELECT sparql.group_concat(object, ' | ') AS obj_list FROM ft WHERE sparql.isliteral(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISLITERAL(?o)) } INFO: SPARQL returned 28 records. obj_list --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- " | Hello 👋 PostgreSQL 🐘 | unknown literal type | explicit string literal | . <= pontos => . | + <= salto de línea => + | \" <= double-quotes => \" | <= Tabulatorzeichen => | 51.9636 | 7.6136 | University of Münster | Westfälische Wilhelms-Universität Münster | Univerrrsity of Münsterrr | Univêrsity of Münsta | 18:18:42 | 1780-04-16 | 2025-12-24T18:30:42 | 2025-12-24T13:00:42Z | Johannes Wessels | 1924 | 49098 | 4956 | 803600000 | 1500.00 | 9999999999999999999 | 0.000000000000001 | 2024-02-29 | true" (1 row) SELECT sparql.group_concat(object, '') AS obj_list FROM ft WHERE sparql.isliteral(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISLITERAL(?o)) } INFO: SPARQL returned 28 records. obj_list --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "Hello 👋 PostgreSQL 🐘unknown literal typeexplicit string literal. <= pontos => . + <= salto de línea => + \" <= double-quotes => \" <= Tabulatorzeichen => 51.96367.6136University of MünsterWestfälische Wilhelms-Universität MünsterUniverrrsity of MünsterrrUnivêrsity of Münsta18:18:421780-04-162025-12-24T18:30:422025-12-24T13:00:42ZJohannes Wessels19244909849568036000001500.0099999999999999999990.0000000000000012024-02-29true" (1 row) /* SPARQL Aggregate SAMPLE */ SELECT sparql.sample(object) AS obj_sample FROM ft WHERE sparql.isliteral(object); INFO: SPARQL query sent to 'graphdb': SELECT ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISLITERAL(?o)) } INFO: SPARQL returned 28 records. obj_sample ------------ "" (1 row) /* Custom Function LEX */ SELECT subject, predicate, sparql.lex(object) FROM ft WHERE sparql.isliteral(object); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(ISLITERAL(?o)) } INFO: SPARQL returned 28 records. subject | predicate | lex -------------------------------+---------------------------------------------------+------------------------------------------- | | | | Hello 👋 PostgreSQL 🐘 | | unknown literal type | | explicit string literal | | . <= pontos => . | | + | | <= salto de línea => + | | | | \" <= double-quotes => \" | | <= Tabulatorzeichen => | | 51.9636 | | 7.6136 | | University of Münster | | Westfälische Wilhelms-Universität Münster | | Univerrrsity of Münsterrr | | Univêrsity of Münsta | | 18:18:42 | | 1780-04-16 | | 2025-12-24T18:30:42 | | 2025-12-24T13:00:42Z | | Johannes Wessels | | 1924 | | 49098 | | 4956 | | 803600000 | | 1500.00 | | 9999999999999999999 | | 0.000000000000001 | | 2024-02-29 | | true (28 rows) -- Empty literals in various contexts SELECT * FROM ft WHERE object = '""'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "") } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+-------- | | "" (1 row) SELECT * FROM ft WHERE sparql.strlen(object) = 0; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(STRLEN(?o) = 0) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------------------+-------- | | "" (1 row) SELECT * FROM ft WHERE sparql.substr(object, 1, 0) = '""'::rdfnode; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(SUBSTR(?o, 1, 0) = "") } INFO: SPARQL returned 3 records. subject | predicate | object -------------------------------+------------------------------------------------+--------------------------- | | "" | | "explicit string literal" | | "Johannes Wessels" (3 rows) -- Very large/small decimals SELECT * FROM ft WHERE object = 9999999999999999999::numeric::rdfnode ORDER BY predicate; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "9999999999999999999"^^) } ORDER BY ASC (?p) INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+------------------------------------------------------------------- | | "9999999999999999999"^^ (1 row) SELECT * FROM ft WHERE object = 0.000000000000001::numeric::rdfnode ORDER BY predicate; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o = "0.000000000000001"^^) } ORDER BY ASC (?p) INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-----------------------------------------------+----------------------------------------------------------------- | | "0.000000000000001"^^ (1 row) SELECT * FROM ft WHERE object BETWEEN 0.000000000000001::numeric::rdfnode AND 1000000000000000000::numeric::rdfnode ORDER BY predicate; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?o >= "0.000000000000001"^^) FILTER(?o <= "1000000000000000000"^^) } ORDER BY ASC (?p) INFO: SPARQL returned 8 records. subject | predicate | object -------------------------------+---------------------------------------------------+----------------------------------------------------------------- | | "4956"^^ | | "1924"^^ | | "803600000"^^ | | "49098"^^ | | "1500.00"^^ | | "0.000000000000001"^^ | | "51.9636"^^ | | "7.6136"^^ (8 rows) -- Leap year dates SELECT * FROM ft WHERE sparql.month(object) = 2 AND sparql.day(object) = 29; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(MONTH(?o) = 2) FILTER(DAY(?o) = 29) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+-------------------------------------------+------------------------------------------------------- | | "2024-02-29"^^ (1 row) -- NOT conditions SELECT * FROM ft WHERE NOT sparql.isiri(object) AND NOT sparql.isblank(object) AND NOT sparql.isnumeric(object) AND NOT sparql.langmatches(sparql.lang(object), 'en'); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o} INFO: SPARQL returned 144 records. subject | predicate | object -------------------------------+-------------------------------------------------+--------------------------------------------------------------------- | | "" | | "unknown literal type"^^ | | "explicit string literal" | | ". <= pontos => ."@pt | | " + | | <= salto de línea => + | | "@es | | " <= Tabulatorzeichen => "@de | | "Westfälische Wilhelms-Universität Münster"@de | | "18:18:42"^^ | | "1780-04-16"^^ | | "2025-12-24T18:30:42"^^ | | "2025-12-24T13:00:42Z"^^ | | "Johannes Wessels" | | "2024-02-29"^^ | | "true"^^ (14 rows) -- SELECT ... INTO TEMPORARY TABLE SELECT subject, predicate, object INTO TEMPORARY TABLE tmp2 FROM ft WHERE subject = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } INFO: SPARQL returned 30 records. SELECT count(*) FROM tmp2; count ------- 30 (1 row) -- SELECT ... INTO TABLE SELECT subject, predicate, object INTO TABLE t2 FROM ft WHERE subject = ''; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?s = ) } INFO: SPARQL returned 30 records. SELECT count(*) FROM t2; count ------- 30 (1 row) DROP TABLE t2; -- Nested function calls SELECT * FROM ft WHERE predicate = '' AND object = '"Westfälische Wilhelms-Universität Münster"@de' AND sparql.isnumeric( sparql.round( sparql.strlen( sparql.substr( sparql.str(object), 1, 9)))); INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o ## rdf_fdw pushdown conditions ## FILTER(?p = ) FILTER(?o = "Westfälische Wilhelms-Universität Münster"@de) FILTER(ISNUMERIC(ROUND(STRLEN(SUBSTR(STR(?o), 1, 9))))) } INFO: SPARQL returned 1 record. subject | predicate | object -------------------------------+------------------------------------+------------------------------------------------ | | "Westfälische Wilhelms-Universität Münster"@de (1 row) -- EXPLAIN of a query EXPLAIN (COSTS OFF) SELECT * FROM ft WHERE predicate = '' AND object = '"Westfälische Wilhelms-Universität Münster"@de' AND subject::text = ''; QUERY PLAN ----------------------------------------------------------------------------------------------------------------------- Foreign Scan on ft Filter: ((subject)::text = ''::text) Foreign Server: graphdb Pushdown: enabled Remote Select: ?s ?p ?o Remote Filter: ((?p = ) && (?o = "Westfälische Wilhelms-Universität Münster"@de)) (6 rows) /* Invalid SPARQL query test */ CREATE FOREIGN TABLE ft_invalid_sparql ( s rdfnode OPTIONS (variable '?s'), p rdfnode OPTIONS (variable '?p'), o rdfnode OPTIONS (variable '?o') ) SERVER graphdb OPTIONS ( sparql 'SELECT * WHERE {?s ?p }' -- missing object in triple pattern ); SELECT * FROM ft_invalid_sparql; ERROR: bad request (HTTP status 400) /* invalid SERVER url */ CREATE SERVER server_invalid_url FOREIGN DATA WRAPPER rdf_fdw OPTIONS ( endpoint 'http://10.10.70.80:9999/repositories/test', update_url 'http://10.10.70.80:9999/repositories/test/statements', connect_timeout '1' ); CREATE FOREIGN TABLE ft_server_invalid_url ( s rdfnode OPTIONS (variable '?s'), p rdfnode OPTIONS (variable '?p'), o rdfnode OPTIONS (variable '?o') ) SERVER server_invalid_url OPTIONS ( sparql 'SELECT * WHERE {?s ?p ?o}' ); SELECT * FROM ft_server_invalid_url; WARNING: ExecuteSPARQL: request to 'server_invalid_url' failed (1) WARNING: ExecuteSPARQL: request to 'server_invalid_url' failed (2) WARNING: ExecuteSPARQL: request to 'server_invalid_url' failed (3) ERROR: unable to connect to 'server_invalid_url' DETAIL: Timeout was reached (curl error code 28) /* cleanup */ DELETE FROM ft; INFO: SPARQL query sent to 'graphdb': SELECT ?s ?p ?o {?s ?p ?o} INFO: SPARQL returned 144 records. INFO: SPARQL query sent to 'graphdb': DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; INFO: SPARQL query sent to 'graphdb': DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; INFO: SPARQL query sent to 'graphdb': DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { "" }; DELETE DATA { "Hello 👋 PostgreSQL 🐘"@en }; DELETE DATA { "unknown literal type"^^ }; DELETE DATA { "explicit string literal" }; DELETE DATA { ". <= pontos => ."@pt }; DELETE DATA { "\n <= salto de línea => \n"@es }; DELETE DATA { "\" <= double-quotes => \""@en }; DELETE DATA { "\t <= Tabulatorzeichen => \t"@de }; DELETE DATA { "51.9636"^^ }; DELETE DATA { "7.6136"^^ }; DELETE DATA { "University of Münster"@en }; DELETE DATA { "Westfälische Wilhelms-Universität Münster"@de }; DELETE DATA { "Univerrrsity of Münsterrr"@en-US }; DELETE DATA { "Univêrsity of Münsta"@en-GB }; DELETE DATA { "18:18:42"^^ }; DELETE DATA { "1780-04-16"^^ }; DELETE DATA { "2025-12-24T18:30:42"^^ }; DELETE DATA { "2025-12-24T13:00:42Z"^^ }; DELETE DATA { "Johannes Wessels" }; DELETE DATA { }; DELETE DATA { }; DELETE DATA { "1924"^^ }; DELETE DATA { "49098"^^ }; DELETE DATA { "4956"^^ }; DELETE DATA { "803600000"^^ }; DELETE DATA { "1500.00"^^ }; DELETE DATA { "9999999999999999999"^^ }; DELETE DATA { "0.000000000000001"^^ }; DELETE DATA { "2024-02-29"^^ }; DELETE DATA { "true"^^ }; DROP SERVER server_invalid_url CASCADE; NOTICE: drop cascades to foreign table ft_server_invalid_url DROP SERVER graphdb CASCADE; NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to foreign table ft drop cascades to user mapping for postgres on server graphdb drop cascades to foreign table ft_invalid_sparql