\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'); SELECT * FROM ft WHERE subject = ''; UPDATE ft SET object = '"University of Münster"@en' WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; UPDATE ft SET object = '""'::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; UPDATE ft SET object = '🐘'::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update using existing column */ UPDATE ft SET object = predicate WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update literals with quotes */ UPDATE ft SET object = '"\"text with quotes\""'::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update literals containing newlines */ UPDATE ft SET object = '"text \n newline"'::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update to xsd:string literal (graphdb might omit xsd:string datatype) */ UPDATE ft SET object = '"text xsd string"^^'::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update to xsd:int literal */ UPDATE ft SET object = 42::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update to xsd:decimal literal */ UPDATE ft SET object = 42.37::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update to xsd:long literal */ UPDATE ft SET object = 423712345678911::rdfnode WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update with NULL - must fail (after SELECT since FDW must fetch OLD values first) */ UPDATE ft SET object = NULL WHERE subject = '' AND predicate = ''; SELECT * FROM ft WHERE subject = ''; /* update rdfnode with a blank node */ UPDATE ft SET object = sparql.bnode() WHERE subject = '' AND predicate = ''; /* update with RETURNING */ UPDATE ft SET object = '"Westfälische Wilhelms-Universität Münster"@de' WHERE subject = '' AND predicate = '' RETURNING OLD.subject, OLD.predicate, OLD.object, NEW.subject AS new_subject, NEW.predicate AS new_predicate, NEW.object AS new_object; /* cleanup */ DELETE FROM ft; DROP SERVER graphdb CASCADE;