@ -2,23 +2,16 @@
-- create FDW objects
-- create FDW objects
-- ===================================================================
-- ===================================================================
CREATE EXTENSION postgres_fdw;
CREATE EXTENSION postgres_fdw;
SELECT current_database() AS current_database,
current_setting('port') AS current_port
\gset
CREATE SERVER testserver1 FOREIGN DATA WRAPPER postgres_fdw;
CREATE SERVER testserver1 FOREIGN DATA WRAPPER postgres_fdw;
DO $d$
CREATE SERVER loopback FOREIGN DATA WRAPPER postgres_fdw
BEGIN
OPTIONS (dbname :'current_database', port :'current_port');
EXECUTE $$CREATE SERVER loopback FOREIGN DATA WRAPPER postgres_fdw
CREATE SERVER loopback2 FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname '$$||current_database()||$$',
OPTIONS (dbname :'current_database', port :'current_port');
port '$$||current_setting('port')||$$'
CREATE SERVER loopback3 FOREIGN DATA WRAPPER postgres_fdw
)$$;
OPTIONS (dbname :'current_database', port :'current_port');
EXECUTE $$CREATE SERVER loopback2 FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname '$$||current_database()||$$',
port '$$||current_setting('port')||$$'
)$$;
EXECUTE $$CREATE SERVER loopback3 FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname '$$||current_database()||$$',
port '$$||current_setting('port')||$$'
)$$;
END;
$d$;
CREATE USER MAPPING FOR public SERVER testserver1
CREATE USER MAPPING FOR public SERVER testserver1
OPTIONS (user 'value', password 'value');
OPTIONS (user 'value', password 'value');
CREATE USER MAPPING FOR CURRENT_USER SERVER loopback;
CREATE USER MAPPING FOR CURRENT_USER SERVER loopback;
@ -235,12 +228,7 @@ SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should work
ALTER SERVER loopback OPTIONS (SET dbname 'no such database');
ALTER SERVER loopback OPTIONS (SET dbname 'no such database');
SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should fail
SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should fail
ERROR: could not connect to server "loopback"
ERROR: could not connect to server "loopback"
DO $d$
ALTER SERVER loopback OPTIONS (SET dbname :'current_database');
BEGIN
EXECUTE $$ALTER SERVER loopback
OPTIONS (SET dbname '$$||current_database()||$$')$$;
END;
$d$;
SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should work again
SELECT c3, c4 FROM ft1 ORDER BY c3, c1 LIMIT 1; -- should work again
c3 | c4
c3 | c4
-------+------------------------------
-------+------------------------------
@ -10643,14 +10631,8 @@ SHOW is_superuser;
(1 row)
(1 row)
-- This will be OK, we can create the FDW
-- This will be OK, we can create the FDW
DO $d$
CREATE SERVER loopback_nopw FOREIGN DATA WRAPPER postgres_fdw
BEGIN
OPTIONS (dbname :'current_database', port :'current_port');
EXECUTE $$CREATE SERVER loopback_nopw FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname '$$||current_database()||$$',
port '$$||current_setting('port')||$$'
)$$;
END;
$d$;
-- But creation of user mappings for non-superusers should fail
-- But creation of user mappings for non-superusers should fail
CREATE USER MAPPING FOR public SERVER loopback_nopw;
CREATE USER MAPPING FOR public SERVER loopback_nopw;
CREATE USER MAPPING FOR CURRENT_USER SERVER loopback_nopw;
CREATE USER MAPPING FOR CURRENT_USER SERVER loopback_nopw;