*** /home/akaariai/postgres-serializable/postgres/contrib/dblink/expected/dblink.out 2011-02-02 12:22:29.000000000 +0200 --- /home/akaariai/postgres-serializable/postgres/contrib/dblink/results/dblink.out 2011-02-02 13:07:51.000000000 +0200 *************** *** 102,112 **** SELECT * FROM dblink('dbname=contrib_regression','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! a | b | c ! ---+---+------------ ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! (2 rows) -- should generate "connection not available" error SELECT * --- 102,111 ---- SELECT * FROM dblink('dbname=contrib_regression','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- should generate "connection not available" error SELECT * *************** *** 115,248 **** ERROR: connection not available -- create a persistent connection SELECT dblink_connect('dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) -- use the persistent connection SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! a | b | c ! ---+---+------------ ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! (2 rows) ! -- open a cursor with bad SQL and fail_on_error set to false SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foobar',false); ! NOTICE: relation "foobar" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not open cursor. ! dblink_open ! ------------- ! ERROR ! (1 row) ! -- reset remote transaction state SELECT dblink_exec('ABORT'); ! dblink_exec ! ------------- ! ROLLBACK ! (1 row) ! -- open a cursor SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foo'); ! dblink_open ! ------------- ! OK ! (1 row) ! -- close the cursor SELECT dblink_close('rmt_foo_cursor',false); ! dblink_close ! -------------- ! OK ! (1 row) ! -- open the cursor again SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foo'); ! dblink_open ! ------------- ! OK ! (1 row) ! -- fetch some data SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! a | b | c ! ---+---+------------ ! 0 | a | {a0,b0,c0} ! 1 | b | {a1,b1,c1} ! 2 | c | {a2,b2,c2} ! 3 | d | {a3,b3,c3} ! (4 rows) ! SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! a | b | c ! ---+---+------------ ! 4 | e | {a4,b4,c4} ! 5 | f | {a5,b5,c5} ! 6 | g | {a6,b6,c6} ! 7 | h | {a7,b7,c7} ! (4 rows) ! -- this one only finds two rows left SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! a | b | c ! ---+---+------------ ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! (2 rows) ! -- intentionally botch a fetch SELECT * FROM dblink_fetch('rmt_foobar_cursor',4,false) AS t(a int, b text, c text[]); ! NOTICE: cursor "rmt_foobar_cursor" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not fetch from cursor. ! a | b | c ! ---+---+--- ! (0 rows) ! -- reset remote transaction state SELECT dblink_exec('ABORT'); ! dblink_exec ! ------------- ! ROLLBACK ! (1 row) ! -- close the wrong cursor SELECT dblink_close('rmt_foobar_cursor',false); ! NOTICE: cursor "rmt_foobar_cursor" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not close cursor. ! dblink_close ! -------------- ! ERROR ! (1 row) ! -- should generate 'cursor "rmt_foo_cursor" not found' error SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: cursor "rmt_foo_cursor" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not fetch from cursor. -- this time, 'cursor "rmt_foo_cursor" not found' as a notice SELECT * FROM dblink_fetch('rmt_foo_cursor',4,false) AS t(a int, b text, c text[]); ! NOTICE: cursor "rmt_foo_cursor" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not fetch from cursor. ! a | b | c ! ---+---+--- ! (0 rows) ! -- close the persistent connection SELECT dblink_disconnect(); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- should generate "connection not available" error SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) --- 114,176 ---- ERROR: connection not available -- create a persistent connection SELECT dblink_connect('dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- use the persistent connection SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! ERROR: connection not available -- open a cursor with bad SQL and fail_on_error set to false SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foobar',false); ! ERROR: connection not available -- reset remote transaction state SELECT dblink_exec('ABORT'); ! ERROR: connection not available -- open a cursor SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foo'); ! ERROR: connection not available -- close the cursor SELECT dblink_close('rmt_foo_cursor',false); ! ERROR: connection not available -- open the cursor again SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foo'); ! ERROR: connection not available -- fetch some data SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection not available SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection not available -- this one only finds two rows left SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection not available -- intentionally botch a fetch SELECT * FROM dblink_fetch('rmt_foobar_cursor',4,false) AS t(a int, b text, c text[]); ! ERROR: connection not available -- reset remote transaction state SELECT dblink_exec('ABORT'); ! ERROR: connection not available -- close the wrong cursor SELECT dblink_close('rmt_foobar_cursor',false); ! ERROR: connection not available -- should generate 'cursor "rmt_foo_cursor" not found' error SELECT * FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection not available -- this time, 'cursor "rmt_foo_cursor" not found' as a notice SELECT * FROM dblink_fetch('rmt_foo_cursor',4,false) AS t(a int, b text, c text[]); ! ERROR: connection not available -- close the persistent connection SELECT dblink_disconnect(); ! ERROR: connection not available -- should generate "connection not available" error SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) *************** *** 251,351 **** -- put more data into our slave table, first using arbitrary connection syntax -- but truncate the actual return value so we can use diff to check for success SELECT substr(dblink_exec('dbname=contrib_regression','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6); ! substr ! -------- ! INSERT ! (1 row) -- create a persistent connection SELECT dblink_connect('dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) -- put more data into our slave table, using persistent connection syntax -- but truncate the actual return value so we can use diff to check for success SELECT substr(dblink_exec('INSERT INTO foo VALUES(11,''l'',''{"a11","b11","c11"}'')'),1,6); ! substr ! -------- ! INSERT ! (1 row) ! -- let's see it SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]); ! a | b | c ! ----+---+--------------- ! 0 | a | {a0,b0,c0} ! 1 | b | {a1,b1,c1} ! 2 | c | {a2,b2,c2} ! 3 | d | {a3,b3,c3} ! 4 | e | {a4,b4,c4} ! 5 | f | {a5,b5,c5} ! 6 | g | {a6,b6,c6} ! 7 | h | {a7,b7,c7} ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! 11 | l | {a11,b11,c11} ! (12 rows) ! -- bad remote select SELECT * FROM dblink('SELECT * FROM foobar',false) AS t(a int, b text, c text[]); ! NOTICE: relation "foobar" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not execute query. ! a | b | c ! ---+---+--- ! (0 rows) ! -- change some data SELECT dblink_exec('UPDATE foo SET f3[2] = ''b99'' WHERE f1 = 11'); ! dblink_exec ! ------------- ! UPDATE 1 ! (1 row) ! -- let's see it SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! a | b | c ! ----+---+--------------- ! 11 | l | {a11,b99,c11} ! (1 row) ! -- botch a change to some other data SELECT dblink_exec('UPDATE foobar SET f3[2] = ''b99'' WHERE f1 = 11',false); ! NOTICE: relation "foobar" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. ! dblink_exec ! ------------- ! ERROR ! (1 row) ! -- delete some data SELECT dblink_exec('DELETE FROM foo WHERE f1 = 11'); ! dblink_exec ! ------------- ! DELETE 1 ! (1 row) ! -- let's see it SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! a | b | c ! ---+---+--- ! (0 rows) ! -- close the persistent connection SELECT dblink_disconnect(); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- -- tests for the new named persistent connection syntax -- --- 179,230 ---- -- put more data into our slave table, first using arbitrary connection syntax -- but truncate the actual return value so we can use diff to check for success SELECT substr(dblink_exec('dbname=contrib_regression','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- create a persistent connection SELECT dblink_connect('dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- put more data into our slave table, using persistent connection syntax -- but truncate the actual return value so we can use diff to check for success SELECT substr(dblink_exec('INSERT INTO foo VALUES(11,''l'',''{"a11","b11","c11"}'')'),1,6); ! ERROR: connection not available -- let's see it SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]); ! ERROR: connection not available -- bad remote select SELECT * FROM dblink('SELECT * FROM foobar',false) AS t(a int, b text, c text[]); ! ERROR: connection not available -- change some data SELECT dblink_exec('UPDATE foo SET f3[2] = ''b99'' WHERE f1 = 11'); ! ERROR: connection not available -- let's see it SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! ERROR: connection not available -- botch a change to some other data SELECT dblink_exec('UPDATE foobar SET f3[2] = ''b99'' WHERE f1 = 11',false); ! ERROR: connection not available -- delete some data SELECT dblink_exec('DELETE FROM foo WHERE f1 = 11'); ! ERROR: connection not available -- let's see it SELECT * FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! ERROR: connection not available -- close the persistent connection SELECT dblink_disconnect(); ! ERROR: connection not available -- -- tests for the new named persistent connection syntax -- *************** *** 358,581 **** -- create a named persistent connection SELECT dblink_connect('myconn','dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) -- use the named persistent connection SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! a | b | c ! ----+---+--------------- ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! (3 rows) -- use the named persistent connection, but get it wrong SELECT * FROM dblink('myconn','SELECT * FROM foobar',false) AS t(a int, b text, c text[]) WHERE t.a > 7; ! NOTICE: relation "foobar" does not exist ! CONTEXT: Error occurred on dblink connection named "unnamed": could not execute query. ! a | b | c ! ---+---+--- ! (0 rows) -- create a second named persistent connection -- should error with "duplicate connection name" SELECT dblink_connect('myconn','dbname=contrib_regression'); ! ERROR: duplicate connection name -- create a second named persistent connection with a new name SELECT dblink_connect('myconn2','dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) -- use the second named persistent connection SELECT * FROM dblink('myconn2','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! a | b | c ! ----+---+--------------- ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! (3 rows) -- close the second named persistent connection SELECT dblink_disconnect('myconn2'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- open a cursor incorrectly SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foobar',false); ! NOTICE: relation "foobar" does not exist ! CONTEXT: Error occurred on dblink connection named "myconn": could not open cursor. ! dblink_open ! ------------- ! ERROR ! (1 row) ! -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); ! dblink_exec ! ------------- ! ROLLBACK ! (1 row) -- test opening cursor in a transaction SELECT dblink_exec('myconn','BEGIN'); ! dblink_exec ! ------------- ! BEGIN ! (1 row) -- an open transaction will prevent dblink_open() from opening its own SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foo'); ! dblink_open ! ------------- ! OK ! (1 row) ! -- this should not commit the transaction because the client opened it SELECT dblink_close('myconn','rmt_foo_cursor'); ! dblink_close ! -------------- ! OK ! (1 row) ! -- this should succeed because we have an open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ! dblink_exec ! ---------------- ! DECLARE CURSOR ! (1 row) -- commit remote transaction SELECT dblink_exec('myconn','COMMIT'); ! dblink_exec ! ------------- ! COMMIT ! (1 row) -- test automatic transactions for multiple cursor opens SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foo'); ! dblink_open ! ------------- ! OK ! (1 row) ! -- the second cursor SELECT dblink_open('myconn','rmt_foo_cursor2','SELECT * FROM foo'); ! dblink_open ! ------------- ! OK ! (1 row) ! -- this should not commit the transaction SELECT dblink_close('myconn','rmt_foo_cursor2'); ! dblink_close ! -------------- ! OK ! (1 row) ! -- this should succeed because we have an open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ! dblink_exec ! ---------------- ! DECLARE CURSOR ! (1 row) -- this should commit the transaction SELECT dblink_close('myconn','rmt_foo_cursor'); ! dblink_close ! -------------- ! OK ! (1 row) ! -- this should fail because there is no open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ! ERROR: DECLARE CURSOR can only be used in transaction blocks ! CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); ! dblink_exec ! ------------- ! ROLLBACK ! (1 row) -- open a cursor SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foo'); ! dblink_open ! ------------- ! OK ! (1 row) ! -- fetch some data SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! a | b | c ! ---+---+------------ ! 0 | a | {a0,b0,c0} ! 1 | b | {a1,b1,c1} ! 2 | c | {a2,b2,c2} ! 3 | d | {a3,b3,c3} ! (4 rows) ! SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! a | b | c ! ---+---+------------ ! 4 | e | {a4,b4,c4} ! 5 | f | {a5,b5,c5} ! 6 | g | {a6,b6,c6} ! 7 | h | {a7,b7,c7} ! (4 rows) ! -- this one only finds three rows left SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! a | b | c ! ----+---+--------------- ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! (3 rows) ! -- fetch some data incorrectly SELECT * FROM dblink_fetch('myconn','rmt_foobar_cursor',4,false) AS t(a int, b text, c text[]); ! NOTICE: cursor "rmt_foobar_cursor" does not exist ! CONTEXT: Error occurred on dblink connection named "myconn": could not fetch from cursor. ! a | b | c ! ---+---+--- ! (0 rows) ! -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); ! dblink_exec ! ------------- ! ROLLBACK ! (1 row) -- should generate 'cursor "rmt_foo_cursor" not found' error SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: cursor "rmt_foo_cursor" does not exist ! CONTEXT: Error occurred on dblink connection named "myconn": could not fetch from cursor. -- close the named persistent connection SELECT dblink_disconnect('myconn'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- should generate "missing "=" after "myconn" in connection info string" error SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) --- 237,372 ---- -- create a named persistent connection SELECT dblink_connect('myconn','dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- use the named persistent connection SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- use the named persistent connection, but get it wrong SELECT * FROM dblink('myconn','SELECT * FROM foobar',false) AS t(a int, b text, c text[]) WHERE t.a > 7; ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- create a second named persistent connection -- should error with "duplicate connection name" SELECT dblink_connect('myconn','dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? ! -- create a second named persistent connection with a new name SELECT dblink_connect('myconn2','dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- use the second named persistent connection SELECT * FROM dblink('myconn2','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn2" in connection info string -- close the second named persistent connection SELECT dblink_disconnect('myconn2'); ! ERROR: connection "myconn2" not available -- open a cursor incorrectly SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foobar',false); ! ERROR: connection "myconn" not available -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- test opening cursor in a transaction SELECT dblink_exec('myconn','BEGIN'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- an open transaction will prevent dblink_open() from opening its own SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foo'); ! ERROR: connection "myconn" not available -- this should not commit the transaction because the client opened it SELECT dblink_close('myconn','rmt_foo_cursor'); ! ERROR: connection "myconn" not available -- this should succeed because we have an open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- commit remote transaction SELECT dblink_exec('myconn','COMMIT'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- test automatic transactions for multiple cursor opens SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foo'); ! ERROR: connection "myconn" not available -- the second cursor SELECT dblink_open('myconn','rmt_foo_cursor2','SELECT * FROM foo'); ! ERROR: connection "myconn" not available -- this should not commit the transaction SELECT dblink_close('myconn','rmt_foo_cursor2'); ! ERROR: connection "myconn" not available -- this should succeed because we have an open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- this should commit the transaction SELECT dblink_close('myconn','rmt_foo_cursor'); ! ERROR: connection "myconn" not available -- this should fail because there is no open transaction SELECT dblink_exec('myconn','DECLARE xact_test CURSOR FOR SELECT * FROM foo'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string ! -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- open a cursor SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foo'); ! ERROR: connection "myconn" not available -- fetch some data SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection "myconn" not available SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection "myconn" not available -- this one only finds three rows left SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection "myconn" not available -- fetch some data incorrectly SELECT * FROM dblink_fetch('myconn','rmt_foobar_cursor',4,false) AS t(a int, b text, c text[]); ! ERROR: connection "myconn" not available -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- should generate 'cursor "rmt_foo_cursor" not found' error SELECT * FROM dblink_fetch('myconn','rmt_foo_cursor',4) AS t(a int, b text, c text[]); ! ERROR: connection "myconn" not available -- close the named persistent connection SELECT dblink_disconnect('myconn'); ! ERROR: connection "myconn" not available -- should generate "missing "=" after "myconn" in connection info string" error SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) *************** *** 585,703 **** -- create a named persistent connection SELECT dblink_connect('myconn','dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) -- put more data into our slave table, using named persistent connection syntax -- but truncate the actual return value so we can use diff to check for success SELECT substr(dblink_exec('myconn','INSERT INTO foo VALUES(11,''l'',''{"a11","b11","c11"}'')'),1,6); ! substr ! -------- ! INSERT ! (1 row) -- let's see it SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]); ! a | b | c ! ----+---+--------------- ! 0 | a | {a0,b0,c0} ! 1 | b | {a1,b1,c1} ! 2 | c | {a2,b2,c2} ! 3 | d | {a3,b3,c3} ! 4 | e | {a4,b4,c4} ! 5 | f | {a5,b5,c5} ! 6 | g | {a6,b6,c6} ! 7 | h | {a7,b7,c7} ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! 11 | l | {a11,b11,c11} ! (12 rows) -- change some data SELECT dblink_exec('myconn','UPDATE foo SET f3[2] = ''b99'' WHERE f1 = 11'); ! dblink_exec ! ------------- ! UPDATE 1 ! (1 row) -- let's see it SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! a | b | c ! ----+---+--------------- ! 11 | l | {a11,b99,c11} ! (1 row) -- delete some data SELECT dblink_exec('myconn','DELETE FROM foo WHERE f1 = 11'); ! dblink_exec ! ------------- ! DELETE 1 ! (1 row) -- let's see it SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! a | b | c ! ---+---+--- ! (0 rows) -- close the named persistent connection SELECT dblink_disconnect('myconn'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- close the named persistent connection again -- should get 'connection "myconn" not available' error SELECT dblink_disconnect('myconn'); ERROR: connection "myconn" not available -- test asynchronous queries SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) SELECT * from dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1; ! t1 ! ---- ! 1 ! (1 row) SELECT dblink_connect('dtest2', 'dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) SELECT * from dblink_send_query('dtest2', 'select * from foo where f1 > 2 and f1 < 7') as t1; ! t1 ! ---- ! 1 ! (1 row) SELECT dblink_connect('dtest3', 'dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) SELECT * from dblink_send_query('dtest3', 'select * from foo where f1 > 6') as t1; ! t1 ! ---- ! 1 ! (1 row) CREATE TEMPORARY TABLE result AS (SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[])) --- 376,462 ---- -- create a named persistent connection SELECT dblink_connect('myconn','dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? -- put more data into our slave table, using named persistent connection syntax -- but truncate the actual return value so we can use diff to check for success SELECT substr(dblink_exec('myconn','INSERT INTO foo VALUES(11,''l'',''{"a11","b11","c11"}'')'),1,6); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- let's see it SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- change some data SELECT dblink_exec('myconn','UPDATE foo SET f3[2] = ''b99'' WHERE f1 = 11'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- let's see it SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- delete some data SELECT dblink_exec('myconn','DELETE FROM foo WHERE f1 = 11'); ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- let's see it SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE a = 11; ! ERROR: could not establish connection ! DETAIL: missing "=" after "myconn" in connection info string -- close the named persistent connection SELECT dblink_disconnect('myconn'); ! ERROR: connection "myconn" not available -- close the named persistent connection again -- should get 'connection "myconn" not available' error SELECT dblink_disconnect('myconn'); ERROR: connection "myconn" not available -- test asynchronous queries SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? SELECT * from dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1; ! ERROR: could not establish connection ! DETAIL: missing "=" after "dtest1" in connection info string SELECT dblink_connect('dtest2', 'dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? SELECT * from dblink_send_query('dtest2', 'select * from foo where f1 > 2 and f1 < 7') as t1; ! ERROR: could not establish connection ! DETAIL: missing "=" after "dtest2" in connection info string SELECT dblink_connect('dtest3', 'dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? SELECT * from dblink_send_query('dtest3', 'select * from foo where f1 > 6') as t1; ! ERROR: could not establish connection ! DETAIL: missing "=" after "dtest3" in connection info string CREATE TEMPORARY TABLE result AS (SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[])) *************** *** 706,711 **** --- 465,473 ---- UNION (SELECT * from dblink_get_result('dtest3') as t3(f1 int, f2 text, f3 text[])) ORDER by f1; + ERROR: could not establish connection + DETAIL: missing "=" after "dtest1" in connection info string + -- dblink_get_connections returns an array with elements in a machine-dependent -- ordering, so we must resort to unnesting and sorting for a stable result create function unnest(anyarray) returns setof anyelement *************** *** 715,796 **** SELECT * FROM unnest(dblink_get_connections()) ORDER BY 1; unnest -------- ! dtest1 ! dtest2 ! dtest3 ! (3 rows) SELECT dblink_is_busy('dtest1'); ! dblink_is_busy ! ---------------- ! 0 ! (1 row) ! SELECT dblink_disconnect('dtest1'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! SELECT dblink_disconnect('dtest2'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! SELECT dblink_disconnect('dtest3'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! SELECT * from result; ! f1 | f2 | f3 ! ----+----+--------------- ! 0 | a | {a0,b0,c0} ! 1 | b | {a1,b1,c1} ! 2 | c | {a2,b2,c2} ! 3 | d | {a3,b3,c3} ! 4 | e | {a4,b4,c4} ! 5 | f | {a5,b5,c5} ! 6 | g | {a6,b6,c6} ! 7 | h | {a7,b7,c7} ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! (11 rows) ! SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) SELECT * from dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1; ! t1 ! ---- ! 1 ! (1 row) SELECT dblink_cancel_query('dtest1'); ! dblink_cancel_query ! --------------------- ! OK ! (1 row) ! SELECT dblink_error_message('dtest1'); ! dblink_error_message ! ---------------------- ! OK ! (1 row) ! SELECT dblink_disconnect('dtest1'); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- test foreign data wrapper functionality CREATE USER dblink_regression_test; CREATE FOREIGN DATA WRAPPER postgresql; --- 477,513 ---- SELECT * FROM unnest(dblink_get_connections()) ORDER BY 1; unnest -------- ! (0 rows) SELECT dblink_is_busy('dtest1'); ! ERROR: connection "dtest1" not available SELECT dblink_disconnect('dtest1'); ! ERROR: connection "dtest1" not available SELECT dblink_disconnect('dtest2'); ! ERROR: connection "dtest2" not available SELECT dblink_disconnect('dtest3'); ! ERROR: connection "dtest3" not available SELECT * from result; ! ERROR: relation "result" does not exist ! LINE 1: SELECT * from result; ! ^ SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? SELECT * from dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1; ! ERROR: could not establish connection ! DETAIL: missing "=" after "dtest1" in connection info string SELECT dblink_cancel_query('dtest1'); ! ERROR: connection "dtest1" not available SELECT dblink_error_message('dtest1'); ! ERROR: connection "dtest1" not available SELECT dblink_disconnect('dtest1'); ! ERROR: connection "dtest1" not available -- test foreign data wrapper functionality CREATE USER dblink_regression_test; CREATE FOREIGN DATA WRAPPER postgresql; *************** *** 806,832 **** DETAIL: Non-superusers must provide a password in the connection string. -- should succeed SELECT dblink_connect_u('myconn', 'fdtest'); ! dblink_connect_u ! ------------------ ! OK ! (1 row) SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]); ! a | b | c ! ----+---+--------------- ! 0 | a | {a0,b0,c0} ! 1 | b | {a1,b1,c1} ! 2 | c | {a2,b2,c2} ! 3 | d | {a3,b3,c3} ! 4 | e | {a4,b4,c4} ! 5 | f | {a5,b5,c5} ! 6 | g | {a6,b6,c6} ! 7 | h | {a7,b7,c7} ! 8 | i | {a8,b8,c8} ! 9 | j | {a9,b9,c9} ! 10 | k | {a10,b10,c10} ! (11 rows) ! \c - :ORIGINAL_USER REVOKE USAGE ON FOREIGN SERVER fdtest FROM dblink_regression_test; REVOKE EXECUTE ON FUNCTION dblink_connect_u(text, text) FROM dblink_regression_test; --- 523,536 ---- DETAIL: Non-superusers must provide a password in the connection string. -- should succeed SELECT dblink_connect_u('myconn', 'fdtest'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]); ! ERROR: password is required ! DETAIL: Non-superusers must provide a password in the connection string. \c - :ORIGINAL_USER REVOKE USAGE ON FOREIGN SERVER fdtest FROM dblink_regression_test; REVOKE EXECUTE ON FUNCTION dblink_connect_u(text, text) FROM dblink_regression_test; *************** *** 836,878 **** DROP FOREIGN DATA WRAPPER postgresql; -- test asynchronous notifications SELECT dblink_connect('dbname=contrib_regression'); ! dblink_connect ! ---------------- ! OK ! (1 row) --should return listen SELECT dblink_exec('LISTEN regression'); ! dblink_exec ! ------------- ! LISTEN ! (1 row) ! --should return listen SELECT dblink_exec('LISTEN foobar'); ! dblink_exec ! ------------- ! LISTEN ! (1 row) ! SELECT dblink_exec('NOTIFY regression'); ! dblink_exec ! ------------- ! NOTIFY ! (1 row) ! SELECT dblink_exec('NOTIFY foobar'); ! dblink_exec ! ------------- ! NOTIFY ! (1 row) ! SELECT notify_name, be_pid = (select t.be_pid from dblink('select pg_backend_pid()') as t(be_pid int)) AS is_self_notify, extra from dblink_get_notify(); notify_name | is_self_notify | extra -------------+----------------+------- ! regression | t | ! foobar | t | ! (2 rows) SELECT * from dblink_get_notify(); notify_name | be_pid | extra --- 540,564 ---- DROP FOREIGN DATA WRAPPER postgresql; -- test asynchronous notifications SELECT dblink_connect('dbname=contrib_regression'); ! ERROR: could not establish connection ! DETAIL: could not connect to server: No such file or directory ! Is the server running locally and accepting ! connections on Unix domain socket "/tmp/.s.PGSQL.5432"? --should return listen SELECT dblink_exec('LISTEN regression'); ! ERROR: connection not available --should return listen SELECT dblink_exec('LISTEN foobar'); ! ERROR: connection not available SELECT dblink_exec('NOTIFY regression'); ! ERROR: connection not available SELECT dblink_exec('NOTIFY foobar'); ! ERROR: connection not available SELECT notify_name, be_pid = (select t.be_pid from dblink('select pg_backend_pid()') as t(be_pid int)) AS is_self_notify, extra from dblink_get_notify(); notify_name | is_self_notify | extra -------------+----------------+------- ! (0 rows) SELECT * from dblink_get_notify(); notify_name | be_pid | extra *************** *** 880,890 **** (0 rows) SELECT dblink_disconnect(); ! dblink_disconnect ! ------------------- ! OK ! (1 row) ! -- test dropped columns in dblink_build_sql_insert, dblink_build_sql_update CREATE TEMP TABLE test_dropped ( --- 566,572 ---- (0 rows) SELECT dblink_disconnect(); ! ERROR: connection not available -- test dropped columns in dblink_build_sql_insert, dblink_build_sql_update CREATE TEMP TABLE test_dropped ( ======================================================================