POSTGRES - риск отбрасывания сторонней оболочки данных / схемы - PullRequest
0 голосов
/ 11 января 2019

У нас был один из разработчиков, создавший стороннюю оболочку данных с этими командами:

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 голосов
/ 11 января 2019

Возможно, команда удаляет что-то за пределами схемы. Учтите это:

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, см. Этот ответ Как составить список таблиц, затронутых каскадным удалением.

...