我们让一位开发人员使用以下命令创建了外部数据包装器:
CREATE SERVER serverName FOREIGN DATA WRAPPER postgres_fdw OPTIONS (xxxx);
CREATE USER MAPPING FOR user SERVER foreign_db OPTIONS (user 'xxxx', password 'xxxx');
CREATE SCHEMA foreign_db;
IMPORT FOREIGN SCHEMA public FROM SERVER serverName INTO foreign_db;
要删除此架构,建议运行:
DROP SCHEMA if exists foreign_db cascade;
DROP USER mapping if exists for user server foreign_db;
DROP SERVER if exists serverName;
在规范中,我看到了CASCADE:
自动放置以下对象(表,函数等) 包含在架构中,并依次包含所有依赖于这些对象的对象 对象
此行让我担心的是
and in turn all objects that depend on those objects
我的问题是是否有可能删除 foreign_db 架构之外的任何内容,如果是,如何检查?
谢谢。
答案 0 :(得分:1)
该命令可能会将某物放到架构之外。考虑一下:
create schema example;
create table example.my_table (id int);
create view public.my_view as select * from example.my_table;
如果使用层叠选项删除了架构,那么public.my_view
也将被删除。但是,这种行为是合乎逻辑的并且是可取的。
您可以选中此命令一一执行:
begin;
drop schema example cascade;
rollback;
该架构将不会被删除,在drop...
之后,您应该获得类似以下内容的信息:
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table example.my_tabledrop cascades to view my_view
或者,您可以使用系统目录pg_depend
,请参见此答案How to list tables affected by cascading delete.