POSTGRES - 丢失外部数据的风险 wrapper/schema
POSTGRES - Risk of dropping foreign data wrapper/schema
我们让其中一位开发人员使用这些命令创建了一个外部数据包装器:
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 的规范中我看到了这个:
Automatically drop objects (tables, functions, etc.) that are
contained in the schema, and in turn all objects that depend on those
objects
我关心的是这一行:
and in turn all objects that depend on those objects
我的问题是有可能删除 foreign_db 架构之外的任何内容,如果是,我该如何检查?
谢谢。
该命令可能会在架构之外删除 某些内容。考虑一下:
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
,请参阅此答案
我们让其中一位开发人员使用这些命令创建了一个外部数据包装器:
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 的规范中我看到了这个:
Automatically drop objects (tables, functions, etc.) that are contained in the schema, and in turn all objects that depend on those objects
我关心的是这一行:
and in turn all objects that depend on those objects
我的问题是有可能删除 foreign_db 架构之外的任何内容,如果是,我该如何检查?
谢谢。
该命令可能会在架构之外删除 某些内容。考虑一下:
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
,请参阅此答案