【问题标题】:POSTGRES - Risk of dropping foreign data wrapper/schemaPOSTGRES - 丢弃外部数据包装器/模式的风险
【发布时间】:2019-01-11 16:34:21
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: sql postgresql cascade


    【解决方案1】:

    该命令可能会将 something 放在架构之外。考虑一下:

    create schema example;
    create table example.my_table (id int);
    create view public.my_view as select * from example.my_table;
    

    如果使用 cascade 选项删除架构,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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      相关资源
      最近更新 更多