POSTGRES-删除外部数据包装器/架构的风险

时间:2019-01-11 16:34:22

标签: sql postgresql cascade

我们让一位开发人员使用以下命令创建了外部数据包装器:

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 架构之外的任何内容,如果是,如何检查?

谢谢。

1 个答案:

答案 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.