mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Fix dependency on FDW handler.
ALTER FOREIGN DATA WRAPPER could drop the dependency on the handler function if it wasn't explicitly specified. Reviewed-by: Nathan Bossart <nathandbossart@gmail.com> Discussion: https://postgr.es/m/35c44a4b7fb76d35418c4d66b775a88f4ce60c86.camel@j-davis.com Backpatch-through: 14
This commit is contained in:
@@ -740,6 +740,11 @@ AlterForeignDataWrapper(ParseState *pstate, AlterFdwStmt *stmt)
|
||||
ereport(WARNING,
|
||||
(errmsg("changing the foreign-data wrapper handler can change behavior of existing foreign tables")));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* handler unchanged */
|
||||
fdwhandler = fdwForm->fdwhandler;
|
||||
}
|
||||
|
||||
if (validator_given)
|
||||
{
|
||||
|
||||
@@ -106,6 +106,13 @@ ERROR: conflicting or redundant options
|
||||
LINE 1: ...GN DATA WRAPPER test_fdw HANDLER test_fdw_handler HANDLER in...
|
||||
^
|
||||
CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler;
|
||||
-- should preserve dependency on test_fdw_handler
|
||||
ALTER FOREIGN DATA WRAPPER test_fdw VALIDATOR postgresql_fdw_validator;
|
||||
WARNING: changing the foreign-data wrapper validator can cause the options for dependent objects to become invalid
|
||||
DROP FUNCTION test_fdw_handler(); -- ERROR
|
||||
ERROR: cannot drop function test_fdw_handler() because other objects depend on it
|
||||
DETAIL: foreign-data wrapper test_fdw depends on function test_fdw_handler()
|
||||
HINT: Use DROP ... CASCADE to drop the dependent objects too.
|
||||
DROP FOREIGN DATA WRAPPER test_fdw;
|
||||
-- ALTER FOREIGN DATA WRAPPER
|
||||
ALTER FOREIGN DATA WRAPPER foo OPTIONS (nonexistent 'fdw'); -- ERROR
|
||||
|
||||
@@ -67,6 +67,11 @@ CREATE FUNCTION invalid_fdw_handler() RETURNS int LANGUAGE SQL AS 'SELECT 1;';
|
||||
CREATE FOREIGN DATA WRAPPER test_fdw HANDLER invalid_fdw_handler; -- ERROR
|
||||
CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler HANDLER invalid_fdw_handler; -- ERROR
|
||||
CREATE FOREIGN DATA WRAPPER test_fdw HANDLER test_fdw_handler;
|
||||
|
||||
-- should preserve dependency on test_fdw_handler
|
||||
ALTER FOREIGN DATA WRAPPER test_fdw VALIDATOR postgresql_fdw_validator;
|
||||
DROP FUNCTION test_fdw_handler(); -- ERROR
|
||||
|
||||
DROP FOREIGN DATA WRAPPER test_fdw;
|
||||
|
||||
-- ALTER FOREIGN DATA WRAPPER
|
||||
|
||||
Reference in New Issue
Block a user