diff --git a/contrib/dblink/README b/contrib/dblink/README new file mode 100644 index 000000000..860048fe9 --- /dev/null +++ b/contrib/dblink/README @@ -0,0 +1 @@ +Before run check_dblink.sh, you need to make sure you have import all the environment variable diff --git a/contrib/dblink/check_dblink.sh b/contrib/dblink/check_dblink.sh new file mode 100644 index 000000000..dfd65377e --- /dev/null +++ b/contrib/dblink/check_dblink.sh @@ -0,0 +1,159 @@ +#!/bin/bash + + +function fn_print_help() +{ + echo "Usage: $0 [OPTION] + -?|--help show help information + -U|--user_name cluster user + -p|--port database server port + " +} + + +function fn_prase_input_param() +{ + while [ $# -gt 0 ]; do + case $1 in + -\?|--help ) + fn_print_help + exit 1 + ;; + -U|--user_name ) + fn_check_param user_name $2 + user_name=$2 + shift 2 + ;; + -p|--port ) + fn_check_param port $2 + host_port=$2 + shift 2 + ;; + * ) + echo "Please input right paramtenter, the following command may help you" + echo "sh check_dblink.sh --help or sh check_dblink.sh -?" + exit 1 + esac + done +} + + +function fn_check_param() +{ + if [ "$2"X = X ] + then + echo "no given $1, the following command may help you" + echo "sh check_dblink.sh --help or sh check_dblink.sh -?" + exit 1 + fi +} + + +function fn_check_input() +{ + if [ ! "$user_name" -o ! "$host_port" ] + then + echo "Usage: sh check_dblink.sh -U user_name -p port" + echo "The following command may help you" + echo "sh check_dblink.sh --help or sh check_dblink.sh -?" + return 1 + fi + if [ "`netstat -an | grep -w $host_port`" ] + then + echo "port $host_port occupied, please choose another." + return 1 + fi + return 0 +} + + +function database_install() +{ + echo "init openGauss database" + gs_initdb -D test_dblink/dn1 --nodename=single_node1 -w Test@123 > init.log 2>&1 + if [ $? -ne 0 ] + then + echo "init failed,see init.log for detail information" + delete + exit 1 + else + echo "init success, begin to start" + fi + echo "port = $host_port" >> test_dblink/dn1/postgresql.conf + gs_ctl start -D test_dblink/dn1 > start.log 2>&1 + if [ $? -ne 0 ] + then + echo "start failed,see start.log for detail information" + delete + exit 1 + else + echo "openGauss start success,the port is $host_port" + fi +} + + +function create_sql() +{ + cp sql/dblink.tmp sql/dblink.sql + sed -i "s/portIp/$host_port/g" sql/dblink.sql + sed -i "s/userName/$user_name/g" sql/dblink.sql + cp expected/dblink.tmp expected/dblink.out + sed -i "s/portIp/$host_port/g" expected/dblink.out + sed -i "s/userName/$user_name/g" expected/dblink.out +} + + +function run_check() +{ + gsql -d postgres -p "$host_port" -c "create database regression;" + if [ $? -ne 0 ] + then + echo "create database failed" + delete + exit 1 + fi + + create_sql + if [ $? -ne 0 ] + then + echo "generate sql file failed" + delete + exit 1 + fi + gsql -d regression -p $host_port -a < sql/dblink.sql > result/dblink.out 2>&1 + diff -u result/dblink.out expected/dblink.out > diff.log + if [[ `cat diff.log |wc -l` -eq 0 ]] + then + echo -e "\033[32m OK \033[0m" + else + echo -e "\033[31m FAILED \033[0m" + fi + pid=$(ps ux | grep "test_dblink" | grep -v "grep" | tr -s ' ' | cut -d ' ' -f 2) + kill -9 $pid + delete +} + + +function delete() +{ + rm -rf test_dblink + rm -rf sql/dblink.sql + rm -rf expected/dblink.out +} + + +function main() +{ + fn_prase_input_param $@ + fn_check_input + if [ $? -ne 0 ] + then + exit 1 + fi + database_install + run_check +} + + +main $@ + diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.tmp similarity index 88% rename from contrib/dblink/expected/dblink.out rename to contrib/dblink/expected/dblink.tmp index 8f07cb06c..c7aade974 100644 --- a/contrib/dblink/expected/dblink.out +++ b/contrib/dblink/expected/dblink.tmp @@ -1,16 +1,28 @@ CREATE EXTENSION dblink; +CREATE EXTENSION CREATE TABLE foo(f1 int, f2 text, f3 text[], primary key (f1,f2)); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for table "foo" +CREATE TABLE INSERT INTO foo VALUES (0,'a','{"a0","b0","c0"}'); +INSERT 0 1 INSERT INTO foo VALUES (1,'b','{"a1","b1","c1"}'); +INSERT 0 1 INSERT INTO foo VALUES (2,'c','{"a2","b2","c2"}'); +INSERT 0 1 INSERT INTO foo VALUES (3,'d','{"a3","b3","c3"}'); +INSERT 0 1 INSERT INTO foo VALUES (4,'e','{"a4","b4","c4"}'); +INSERT 0 1 INSERT INTO foo VALUES (5,'f','{"a5","b5","c5"}'); +INSERT 0 1 INSERT INTO foo VALUES (6,'g','{"a6","b6","c6"}'); +INSERT 0 1 INSERT INTO foo VALUES (7,'h','{"a7","b7","c7"}'); +INSERT 0 1 INSERT INTO foo VALUES (8,'i','{"a8","b8","c8"}'); +INSERT 0 1 INSERT INTO foo VALUES (9,'j','{"a9","b9","c9"}'); +INSERT 0 1 -- misc utilities -- list the primary key fields SELECT * @@ -32,6 +44,7 @@ SELECT dblink_build_sql_insert('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); -- too many pk fields, should fail SELECT dblink_build_sql_insert('foo','1 2 3 4',4,'{"0", "a", "{a0,b0,c0}"}','{"99", "xyz", "{za0,zb0,zc0}"}'); ERROR: invalid attribute number 4 +CONTEXT: referenced column: dblink_build_sql_insert -- build an update statement based on a local tuple, -- replacing the primary key values with new ones SELECT dblink_build_sql_update('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); @@ -43,6 +56,7 @@ SELECT dblink_build_sql_update('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); -- too many pk fields, should fail SELECT dblink_build_sql_update('foo','1 2 3 4',4,'{"0", "a", "{a0,b0,c0}"}','{"99", "xyz", "{za0,zb0,zc0}"}'); ERROR: invalid attribute number 4 +CONTEXT: referenced column: dblink_build_sql_update -- build a delete statement based on a local tuple, SELECT dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); dblink_build_sql_delete @@ -53,11 +67,15 @@ SELECT dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); -- too many pk fields, should fail SELECT dblink_build_sql_delete('foo','1 2 3 4',4,'{"0", "a", "{a0,b0,c0}"}'); ERROR: invalid attribute number 4 +CONTEXT: referenced column: dblink_build_sql_delete -- retest using a quoted and schema qualified table CREATE SCHEMA "MySchema"; +CREATE SCHEMA CREATE TABLE "MySchema"."Foo"(f1 int, f2 text, f3 text[], primary key (f1,f2)); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "Foo_pkey" for table "Foo" +CREATE TABLE INSERT INTO "MySchema"."Foo" VALUES (0,'a','{"a0","b0","c0"}'); +INSERT 0 1 -- list the primary key fields SELECT * FROM dblink_get_pkey('"MySchema"."Foo"'); @@ -92,7 +110,7 @@ SELECT dblink_build_sql_delete('"MySchema"."Foo"','1 2',2,'{"0", "a"}'); -- regular old dblink SELECT * -FROM dblink('dbname=contrib_regression','SELECT * FROM foo') AS t(a int, b text, c text[]) +FROM dblink('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; a | b | c ---+---+------------ @@ -106,7 +124,7 @@ FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; ERROR: connection not available -- create a persistent connection -SELECT dblink_connect('dbname=contrib_regression'); +SELECT dblink_connect('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -124,8 +142,9 @@ WHERE t.a > 7; -- 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 +NOTICE: relation "foobar" does not exist on single_node1 CONTEXT: Error occurred on dblink connection named "unnamed": could not open cursor. +referenced column: dblink_open dblink_open ------------- ERROR @@ -209,6 +228,7 @@ SELECT dblink_exec('ABORT'); 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. +referenced column: dblink_close dblink_close -------------- ERROR @@ -242,14 +262,14 @@ WHERE t.a > 7; ERROR: connection not available -- 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); +SELECT substr(dblink_exec('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123','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'); +SELECT dblink_connect('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -285,7 +305,7 @@ FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]); -- bad remote select SELECT * FROM dblink('SELECT * FROM foobar',false) AS t(a int, b text, c text[]); -NOTICE: relation "foobar" does not exist +NOTICE: relation "foobar" does not exist on single_node1 CONTEXT: Error occurred on dblink connection named "unnamed": could not execute query. a | b | c ---+---+--- @@ -309,8 +329,9 @@ WHERE a = 11; -- 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 +NOTICE: relation "foobar" does not exist on single_node1 CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. +referenced column: dblink_exec dblink_exec ------------- ERROR @@ -349,7 +370,7 @@ ERROR: could not establish connection DETAIL: missing "=" after "myconn" in connection info string -- create a named persistent connection -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -370,7 +391,7 @@ WHERE t.a > 7; 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 +NOTICE: relation "foobar" does not exist on single_node1 CONTEXT: Error occurred on dblink connection named "myconn": could not execute query. a | b | c ---+---+--- @@ -378,10 +399,11 @@ CONTEXT: Error occurred on dblink connection named "myconn": could not execute -- create a second named persistent connection -- should error with "duplicate connection name" -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); ERROR: duplicate connection name +CONTEXT: referenced column: dblink_connect -- create a second named persistent connection with a new name -SELECT dblink_connect('myconn2','dbname=contrib_regression'); +SELECT dblink_connect('myconn2','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -407,8 +429,9 @@ SELECT dblink_disconnect('myconn2'); -- open a cursor incorrectly SELECT dblink_open('myconn','rmt_foo_cursor','SELECT * FROM foobar',false); -NOTICE: relation "foobar" does not exist +NOTICE: relation "foobar" does not exist on single_node1 CONTEXT: Error occurred on dblink connection named "myconn": could not open cursor. +referenced column: dblink_open dblink_open ------------- ERROR @@ -495,6 +518,7 @@ SELECT dblink_close('myconn','rmt_foo_cursor'); 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 "myconn": could not execute command. +referenced column: dblink_exec -- reset remote transaction state SELECT dblink_exec('myconn','ABORT'); dblink_exec @@ -576,7 +600,7 @@ ERROR: could not establish connection DETAIL: missing "=" after "myconn" in connection info string -- create a named persistent connection -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -651,8 +675,9 @@ SELECT dblink_disconnect('myconn'); -- should get 'connection "myconn" not available' error SELECT dblink_disconnect('myconn'); ERROR: connection "myconn" not available +CONTEXT: referenced column: dblink_disconnect -- test asynchronous queries -SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest1', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -665,7 +690,7 @@ SELECT * from 1 (1 row) -SELECT dblink_connect('dtest2', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest2', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -678,7 +703,7 @@ SELECT * from 1 (1 row) -SELECT dblink_connect('dtest3', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest3', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -698,12 +723,14 @@ UNION UNION (SELECT * from dblink_get_result('dtest3') as t3(f1 int, f2 text, f3 text[])) ORDER by f1; +INSERT 0 11 -- 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 language sql strict immutable as $$ select $1[i] from generate_series(array_lower($1,1), array_upper($1,1)) as i $$; +CREATE FUNCTION SELECT * FROM unnest(dblink_get_connections()) ORDER BY 1; unnest -------- @@ -752,7 +779,7 @@ SELECT * from result; 10 | k | {a10,b10,c10} (11 rows) -SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest1', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -783,51 +810,8 @@ SELECT dblink_disconnect('dtest1'); OK (1 row) --- test foreign data wrapper functionality -CREATE USER dblink_regression_test; -CREATE FOREIGN DATA WRAPPER postgresql; -CREATE SERVER fdtest FOREIGN DATA WRAPPER postgresql OPTIONS (dbname 'contrib_regression'); -CREATE USER MAPPING FOR public SERVER fdtest; -GRANT USAGE ON FOREIGN SERVER fdtest TO dblink_regression_test; -GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO dblink_regression_test; -\set ORIGINAL_USER :USER -\c - dblink_regression_test --- should fail -SELECT dblink_connect('myconn', 'fdtest'); -ERROR: password is required -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; -DROP USER dblink_regression_test; -DROP USER MAPPING FOR public SERVER fdtest; -DROP SERVER fdtest; -DROP FOREIGN DATA WRAPPER postgresql; -- test asynchronous notifications -SELECT dblink_connect('dbname=contrib_regression'); +SELECT dblink_connect('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -835,36 +819,26 @@ SELECT dblink_connect('dbname=contrib_regression'); --should return listen SELECT dblink_exec('LISTEN regression'); - dblink_exec -------------- - LISTEN -(1 row) - +ERROR: LISTEN statement is not yet supported. +CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. +referenced column: dblink_exec --should return listen SELECT dblink_exec('LISTEN foobar'); - dblink_exec -------------- - LISTEN -(1 row) - +ERROR: LISTEN statement is not yet supported. +CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. +referenced column: dblink_exec SELECT dblink_exec('NOTIFY regression'); - dblink_exec -------------- - NOTIFY -(1 row) - +ERROR: NOFITY statement is not yet supported. +CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. +referenced column: dblink_exec SELECT dblink_exec('NOTIFY foobar'); - dblink_exec -------------- - NOTIFY -(1 row) - +ERROR: NOFITY statement is not yet supported. +CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command. +referenced column: dblink_exec 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) +(0 rows) SELECT * from dblink_get_notify(); notify_name | be_pid | extra @@ -878,7 +852,7 @@ SELECT dblink_disconnect(); (1 row) -- test dropped columns in dblink_build_sql_insert, dblink_build_sql_update -CREATE TEMP TABLE test_dropped +CREATE TABLE test_dropped ( col1 INT NOT NULL DEFAULT 111, id SERIAL PRIMARY KEY, @@ -887,12 +861,15 @@ CREATE TEMP TABLE test_dropped ); NOTICE: CREATE TABLE will create implicit sequence "test_dropped_id_seq" for serial column "test_dropped.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_dropped_pkey" for table "test_dropped" +CREATE TABLE INSERT INTO test_dropped VALUES(default); +INSERT 0 1 ALTER TABLE test_dropped DROP COLUMN col1, DROP COLUMN col2, ADD COLUMN col3 VARCHAR(10) NOT NULL DEFAULT 'foo', ADD COLUMN col4 INT NOT NULL DEFAULT 42; +ALTER TABLE SELECT dblink_build_sql_insert('test_dropped', '1', 1, ARRAY['1'::TEXT], ARRAY['2'::TEXT]); dblink_build_sql_insert @@ -916,9 +893,12 @@ SELECT dblink_build_sql_delete('test_dropped', '1', 1, -- test local mimicry of remote GUC values that affect datatype I/O SET datestyle = ISO, MDY; +SET SET intervalstyle = postgres; +SET SET timezone = UTC; -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SET +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); dblink_connect ---------------- OK @@ -963,10 +943,13 @@ FROM dblink_send_query('myconn', 1 (1 row) +DROP TABLE result; +DROP TABLE CREATE TEMPORARY TABLE result AS (SELECT * from dblink_get_result('myconn') as t(t timestamptz)) UNION ALL (SELECT * from dblink_get_result('myconn') as t(t timestamptz)); +INSERT 0 1 SELECT * FROM result; t ------------------------ @@ -974,6 +957,7 @@ SELECT * FROM result; (1 row) DROP TABLE result; +DROP TABLE -- multi-row asynchronous case SELECT * FROM dblink_send_query('myconn', @@ -991,6 +975,7 @@ UNION ALL (SELECT * from dblink_get_result('myconn') as t(t timestamptz)) UNION ALL (SELECT * from dblink_get_result('myconn') as t(t timestamptz)); +INSERT 0 2 SELECT * FROM result; t ------------------------ @@ -999,6 +984,7 @@ SELECT * FROM result; (2 rows) DROP TABLE result; +DROP TABLE -- Try an ambiguous interval SELECT dblink_exec('myconn', 'SET intervalstyle = sql_standard;'); dblink_exec @@ -1018,6 +1004,7 @@ FROM dblink('myconn', -- Try swapping to another format to ensure the GUCs are tracked -- properly through a change. CREATE TEMPORARY TABLE result (t timestamptz); +CREATE TABLE SELECT dblink_exec('myconn', 'SET datestyle = ISO, MDY;'); dblink_exec ------------- @@ -1029,6 +1016,7 @@ INSERT INTO result FROM dblink('myconn', 'SELECT * FROM (VALUES (''03.12.2013 00:00:00+00'')) t') AS t(a timestamptz); +INSERT 0 1 SELECT dblink_exec('myconn', 'SET datestyle = GERMAN, DMY;'); dblink_exec ------------- @@ -1040,6 +1028,7 @@ INSERT INTO result FROM dblink('myconn', 'SELECT * FROM (VALUES (''12.03.2013 00:00:00+00'')) t') AS t(a timestamptz); +INSERT 0 1 SELECT * FROM result; t ------------------------ @@ -1048,6 +1037,7 @@ SELECT * FROM result; (2 rows) DROP TABLE result; +DROP TABLE -- Check error throwing in dblink_fetch SELECT dblink_open('myconn','error_cursor', 'SELECT * FROM (VALUES (''1''), (''not an int'')) AS t(text);'); @@ -1088,5 +1078,8 @@ SELECT dblink_disconnect('myconn'); (1 row) RESET datestyle; +RESET RESET intervalstyle; +RESET RESET timezone; +RESET diff --git a/contrib/dblink/result/dblink.out b/contrib/dblink/result/dblink.out new file mode 100644 index 000000000..e69de29bb diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.tmp similarity index 88% rename from contrib/dblink/sql/dblink.sql rename to contrib/dblink/sql/dblink.tmp index 245f50e97..89935bd34 100644 --- a/contrib/dblink/sql/dblink.sql +++ b/contrib/dblink/sql/dblink.tmp @@ -57,7 +57,7 @@ SELECT dblink_build_sql_delete('"MySchema"."Foo"','1 2',2,'{"0", "a"}'); -- regular old dblink SELECT * -FROM dblink('dbname=contrib_regression','SELECT * FROM foo') AS t(a int, b text, c text[]) +FROM dblink('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; -- should generate "connection not available" error @@ -66,7 +66,7 @@ FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; -- create a persistent connection -SELECT dblink_connect('dbname=contrib_regression'); +SELECT dblink_connect('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); -- use the persistent connection SELECT * @@ -127,10 +127,10 @@ WHERE t.a > 7; -- 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); +SELECT substr(dblink_exec('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6); -- create a persistent connection -SELECT dblink_connect('dbname=contrib_regression'); +SELECT dblink_connect('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); -- 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 @@ -176,7 +176,7 @@ FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; -- create a named persistent connection -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); -- use the named persistent connection SELECT * @@ -190,10 +190,10 @@ WHERE t.a > 7; -- create a second named persistent connection -- should error with "duplicate connection name" -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); -- create a second named persistent connection with a new name -SELECT dblink_connect('myconn2','dbname=contrib_regression'); +SELECT dblink_connect('myconn2','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); -- use the second named persistent connection SELECT * @@ -279,7 +279,7 @@ FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]) WHERE t.a > 7; -- create a named persistent connection -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); -- 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 @@ -313,15 +313,15 @@ SELECT dblink_disconnect('myconn'); SELECT dblink_disconnect('myconn'); -- test asynchronous queries -SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest1', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); SELECT * from dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1; -SELECT dblink_connect('dtest2', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest2', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); SELECT * from dblink_send_query('dtest2', 'select * from foo where f1 > 2 and f1 < 7') as t1; -SELECT dblink_connect('dtest3', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest3', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); SELECT * from dblink_send_query('dtest3', 'select * from foo where f1 > 6') as t1; @@ -350,7 +350,7 @@ SELECT dblink_disconnect('dtest3'); SELECT * from result; -SELECT dblink_connect('dtest1', 'dbname=contrib_regression'); +SELECT dblink_connect('dtest1', 'host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); SELECT * from dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1; @@ -358,33 +358,8 @@ SELECT dblink_cancel_query('dtest1'); SELECT dblink_error_message('dtest1'); SELECT dblink_disconnect('dtest1'); --- test foreign data wrapper functionality -CREATE USER dblink_regression_test; - -CREATE FOREIGN DATA WRAPPER postgresql; -CREATE SERVER fdtest FOREIGN DATA WRAPPER postgresql OPTIONS (dbname 'contrib_regression'); -CREATE USER MAPPING FOR public SERVER fdtest; -GRANT USAGE ON FOREIGN SERVER fdtest TO dblink_regression_test; -GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO dblink_regression_test; - -\set ORIGINAL_USER :USER -\c - dblink_regression_test --- should fail -SELECT dblink_connect('myconn', 'fdtest'); --- should succeed -SELECT dblink_connect_u('myconn', 'fdtest'); -SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]); - -\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; -DROP USER dblink_regression_test; -DROP USER MAPPING FOR public SERVER fdtest; -DROP SERVER fdtest; -DROP FOREIGN DATA WRAPPER postgresql; - -- test asynchronous notifications -SELECT dblink_connect('dbname=contrib_regression'); +SELECT dblink_connect('host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); --should return listen SELECT dblink_exec('LISTEN regression'); @@ -401,7 +376,7 @@ SELECT * from dblink_get_notify(); SELECT dblink_disconnect(); -- test dropped columns in dblink_build_sql_insert, dblink_build_sql_update -CREATE TEMP TABLE test_dropped +CREATE TABLE test_dropped ( col1 INT NOT NULL DEFAULT 111, id SERIAL PRIMARY KEY, @@ -430,7 +405,7 @@ SELECT dblink_build_sql_delete('test_dropped', '1', 1, SET datestyle = ISO, MDY; SET intervalstyle = postgres; SET timezone = UTC; -SELECT dblink_connect('myconn','dbname=contrib_regression'); +SELECT dblink_connect('myconn','host=127.0.0.1 port=portIp dbname=regression user=userName password=Test@123'); SELECT dblink_exec('myconn', 'SET datestyle = GERMAN, DMY;'); -- single row synchronous case @@ -452,6 +427,7 @@ SELECT * FROM dblink_send_query('myconn', 'SELECT * FROM (VALUES (''12.03.2013 00:00:00+00'')) t'); +DROP TABLE result; CREATE TEMPORARY TABLE result AS (SELECT * from dblink_get_result('myconn') as t(t timestamptz)) UNION ALL