CREATE SERVER virtuoso FOREIGN DATA WRAPPER rdf_fdw OPTIONS ( endpoint 'http://virtuoso:8890/sparql-auth', batch_size '10000'); CREATE FOREIGN TABLE ft ( subject rdfnode OPTIONS (variable '?s'), predicate rdfnode OPTIONS (variable '?p'), object rdfnode OPTIONS (variable '?o') ) SERVER virtuoso OPTIONS ( log_sparql 'false', sparql 'SELECT * { GRAPH {?s ?p ?o} }', sparql_update_pattern 'GRAPH { ?s ?p ?o . }' ); CREATE USER MAPPING FOR postgres SERVER virtuoso OPTIONS (user 'dba', password 'secret'); /* inserting a large literal (one million characters) */ INSERT INTO ft (subject, predicate, object) VALUES ('', '', repeat('x', 1000000)::rdfnode); SELECT subject, predicate, sparql.strlen(object) FROM ft; subject | predicate | strlen -------------------------------+----------------------------------------------+--------- | | 1000000 (1 row) /* updating the large literal (one million characters) */ UPDATE ft SET object = repeat('y', 1000000)::rdfnode WHERE subject = '' AND predicate = ''; SELECT subject, predicate, sparql.strlen(object) FROM ft; subject | predicate | strlen -------------------------------+----------------------------------------------+--------- | | 1000000 (1 row) /* deleting triple with large literal */ DELETE FROM ft; /* inserting a one million triples */ INSERT INTO ft (subject, predicate, object) SELECT '', '', i::rdfnode FROM generate_series(1,1000000) AS g(i); ERROR: bad request on server "virtuoso" (HTTP 400) DETAIL: Virtuoso 37000 Error SP031: SPARQL: Internal error: The length of generated SQL text has exceeded 10000 lines of code SPARQL query: define sql:big-data-const 0 INSERT DATA { GRAPH { "1"^^ . } }; INSERT DATA { GRAPH { "2"^^ 'public.ft', target_table => 'public.ft_clone', fetch_size => 100000, create_table => true, verbose => true ); INFO: Target TABLE "public.ft_clone" created based on FOREIGN TABLE "public.ft": CREATE TABLE public.ft_clone AS SELECT * FROM public.ft WITH NO DATA; INFO: == Parameters == foreign_table: 'ft' target_table: 'public.ft_clone' create_table: 'true' fetch_size: 100000 begin_offset: 0 max_records: 0 ordering_column: 'NOT SET' ordering sparql variable: '?s' sort_order: 'ASC' DROP TABLE ft_clone; /* describing subject with one million triples */ CREATE UNLOGGED TABLE temp_describe AS SELECT subject, predicate, object FROM sparql.describe('virtuoso', 'DESCRIBE ') ORDER BY object::bigint; SELECT count(*) FROM temp_describe; count ------- 0 (1 row) SELECT * FROM temp_describe WHERE subject = ''::rdfnode AND object BETWEEN 500000::rdfnode AND 500010::rdfnode; subject | predicate | object ---------+-----------+-------- (0 rows) DROP TABLE temp_describe; /* deleting a million triples */ DELETE FROM ft; SELECT * FROM ft; subject | predicate | object ---------+-----------+-------- (0 rows) DROP SERVER virtuoso CASCADE; NOTICE: drop cascades to 2 other objects DETAIL: drop cascades to foreign table ft drop cascades to user mapping for postgres on server virtuoso