CREATE SCHEMA foreign_schema;
CREATE FOREIGN DATA WRAPPER dummy;
CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
+CREATE FOREIGN DATA WRAPPER csv VALIDATOR csv_fdw_validator HANDLER csv_fdw_handler;
-- At this point we should have 2 built-in wrappers and no servers.
SELECT fdwname, fdwvalidator::regproc, fdwhandler::regproc, fdwoptions FROM pg_foreign_data_wrapper ORDER BY fdwname;
- fdwname | fdwvalidator | fdwhandler | fdwoptions
-------------+--------------------------+------------+------------
- dummy | - | - |
- postgresql | postgresql_fdw_validator | - |
-(2 rows)
+ fdwname | fdwvalidator | fdwhandler | fdwoptions
+------------+--------------------------+-----------------+------------
+ csv | csv_fdw_validator | csv_fdw_handler |
+ dummy | - | - |
+ postgresql | postgresql_fdw_validator | - |
+(3 rows)
SELECT srvname, srvoptions FROM pg_foreign_server;
srvname | srvoptions
ERROR: function bar(text[], oid) does not exist
CREATE FOREIGN DATA WRAPPER foo;
\dew
- List of foreign-data wrappers
- Name | Owner | Handler | Validator
-------------+-------------------+---------+--------------------------
- dummy | foreign_data_user | - | -
- foo | foreign_data_user | - | -
- postgresql | foreign_data_user | - | postgresql_fdw_validator
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator
+------------+-------------------+-----------------+--------------------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator
+ dummy | foreign_data_user | - | -
+ foo | foreign_data_user | - | -
+ postgresql | foreign_data_user | - | postgresql_fdw_validator
+(4 rows)
CREATE FOREIGN DATA WRAPPER foo; -- duplicate
ERROR: foreign-data wrapper "foo" already exists
DROP FOREIGN DATA WRAPPER foo;
CREATE FOREIGN DATA WRAPPER foo OPTIONS (testing '1');
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+-------------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | | {testing=1}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+-------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | | {testing=1}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
DROP FOREIGN DATA WRAPPER foo;
CREATE FOREIGN DATA WRAPPER foo OPTIONS (testing '1', testing '2'); -- ERROR
ERROR: option "testing" provided more than once
CREATE FOREIGN DATA WRAPPER foo OPTIONS (testing '1', another '2');
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+-----------------------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | | {testing=1,another=2}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+-----------------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | | {testing=1,another=2}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
DROP FOREIGN DATA WRAPPER foo;
SET ROLE regress_test_role;
RESET ROLE;
CREATE FOREIGN DATA WRAPPER foo VALIDATOR postgresql_fdw_validator;
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+---------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | postgresql_fdw_validator | |
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+---------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | postgresql_fdw_validator | |
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
-- ALTER FOREIGN DATA WRAPPER
ALTER FOREIGN DATA WRAPPER foo; -- ERROR
ERROR: function bar(text[], oid) does not exist
ALTER FOREIGN DATA WRAPPER foo NO VALIDATOR;
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+---------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | |
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+---------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | |
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
ALTER FOREIGN DATA WRAPPER foo OPTIONS (a '1', b '2');
ALTER FOREIGN DATA WRAPPER foo OPTIONS (SET c '4'); -- ERROR
ERROR: option "c" not found
ALTER FOREIGN DATA WRAPPER foo OPTIONS (ADD x '1', DROP x);
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+-----------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | | {a=1,b=2}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+-----------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | | {a=1,b=2}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
ALTER FOREIGN DATA WRAPPER foo OPTIONS (DROP a, SET b '3', ADD c '4');
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+-----------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | | {b=3,c=4}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+-----------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | | {b=3,c=4}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
ALTER FOREIGN DATA WRAPPER foo OPTIONS (a '2');
ALTER FOREIGN DATA WRAPPER foo OPTIONS (b '4'); -- ERROR
ERROR: option "b" provided more than once
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+---------------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | | {b=3,c=4,a=2}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+---------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | | {b=3,c=4,a=2}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
SET ROLE regress_test_role;
ALTER FOREIGN DATA WRAPPER foo OPTIONS (ADD d '5'); -- ERROR
SET ROLE regress_test_role_super;
ALTER FOREIGN DATA WRAPPER foo OPTIONS (ADD d '5');
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+-------------------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | | {b=3,c=4,a=2,d=5}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+-------------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | | {b=3,c=4,a=2,d=5}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
ALTER FOREIGN DATA WRAPPER foo OWNER TO regress_test_role; -- ERROR
ERROR: permission denied to change owner of foreign-data wrapper "foo"
HINT: Must be superuser to alter a foreign-data wrapper.
RESET ROLE;
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------------+---------+--------------------------+-------------------+-------------------
- dummy | foreign_data_user | - | - | |
- foo | regress_test_role_super | - | - | | {b=3,c=4,a=2,d=5}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------------+-----------------+--------------------------+-------------------+-------------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | regress_test_role_super | - | - | | {b=3,c=4,a=2,d=5}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
-- DROP FOREIGN DATA WRAPPER
DROP FOREIGN DATA WRAPPER nonexistent; -- ERROR
DROP FOREIGN DATA WRAPPER IF EXISTS nonexistent;
NOTICE: foreign-data wrapper "nonexistent" does not exist, skipping
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------------+---------+--------------------------+-------------------+-------------------
- dummy | foreign_data_user | - | - | |
- foo | regress_test_role_super | - | - | | {b=3,c=4,a=2,d=5}
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------------+-----------------+--------------------------+-------------------+-------------------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | regress_test_role_super | - | - | | {b=3,c=4,a=2,d=5}
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
DROP ROLE regress_test_role_super; -- ERROR
ERROR: role "regress_test_role_super" cannot be dropped because some objects depend on it
DROP FOREIGN DATA WRAPPER foo;
DROP ROLE regress_test_role_super;
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+---------
- dummy | foreign_data_user | - | - | |
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(2 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+---------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(3 rows)
CREATE FOREIGN DATA WRAPPER foo;
CREATE SERVER s1 FOREIGN DATA WRAPPER foo;
CREATE USER MAPPING FOR current_user SERVER s1;
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+---------
- dummy | foreign_data_user | - | - | |
- foo | foreign_data_user | - | - | |
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(3 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+---------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ foo | foreign_data_user | - | - | |
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(4 rows)
\des+
List of foreign servers
DETAIL: drop cascades to server s1
drop cascades to user mapping for foreign_data_user
\dew+
- List of foreign-data wrappers
- Name | Owner | Handler | Validator | Access privileges | Options
-------------+-------------------+---------+--------------------------+-------------------+---------
- dummy | foreign_data_user | - | - | |
- postgresql | foreign_data_user | - | postgresql_fdw_validator | |
-(2 rows)
+ List of foreign-data wrappers
+ Name | Owner | Handler | Validator | Access privileges | Options
+------------+-------------------+-----------------+--------------------------+-------------------+---------
+ csv | foreign_data_user | csv_fdw_handler | csv_fdw_validator | |
+ dummy | foreign_data_user | - | - | |
+ postgresql | foreign_data_user | - | postgresql_fdw_validator | |
+(3 rows)
\des+
List of foreign servers
SELECT * FROM information_schema.foreign_data_wrappers ORDER BY 1, 2;
foreign_data_wrapper_catalog | foreign_data_wrapper_name | authorization_identifier | library_name | foreign_data_wrapper_language
------------------------------+---------------------------+--------------------------+--------------+-------------------------------
+ regression | csv | foreign_data_user | | c
regression | dummy | foreign_data_user | | c
regression | foo | foreign_data_user | | c
regression | postgresql | foreign_data_user | | c
-(3 rows)
+(4 rows)
SELECT * FROM information_schema.foreign_data_wrapper_options ORDER BY 1, 2, 3;
foreign_data_wrapper_catalog | foreign_data_wrapper_name | option_name | option_value
REVOKE ALL ON FOREIGN DATA WRAPPER postgresql FROM unprivileged_role;
DROP ROLE unprivileged_role;
DROP ROLE regress_test_role2;
+DROP FOREIGN DATA WRAPPER csv CASCADE;
DROP FOREIGN DATA WRAPPER postgresql CASCADE;
DROP FOREIGN DATA WRAPPER dummy CASCADE;
\c