2016-11-21 2 views
0

Использование внешней оболочки MySQL в PostgreSQL - это хороший трюк, который позволяет вам быстро сообщать Postgres обо всех таблицах в базе данных MySQL. Она заключается в следующем:Удаление внешней схемы в PostgreSQL с использованием внешней обертки данных

IMPORT FOREIGN SCHEMA my_favourite_database FROM SERVER mysql_server INTO public;

Там нет аналога DROP FOREIGN SCHEMA. Хотя DROP FOREIGN TABLE можно было сделать по частям для каждой таблицы, это также требует знания имен всех таблиц в иностранной базе данных. Я также не уверен, действительно ли эта команда DROP с таблицей в чужой базе данных или просто с ней связано.

Как бы это сделать автоматически.

Я представляю себе такой же подход будет применяться к любой внешней обертке данных в PostgreSQL

ответ

1

drop foreign table только капли «локальные» определения внешней таблицы, а не таблица в удаленном разъединяют.

Вы можете удалить все внешние таблицы с коротким блоком PL/PgSQL:

do 
$$ 
declare 
    l_rec record; 
begin 
    for l_rec in (select foreign_table_schema, foreign_table_name 
       from information_schema.foreign_tables) loop 
    execute format('drop foreign table %I.%I', l_rec.foreign_table_schema, l_rec.foreign_table_name); 
    end loop; 
end; 
$$ 

Это падение всех иностранных таблиц в текущей базе данных. Если вы хотите ограничить это только для определенных таблиц, вы можете соответствующим образом настроить запрос в цикле for, например. выбрав только те, которые предназначены для определенного иностранного сервера. where foreign_server_name = 'mysql'

Я также поместил бы все эти чужие таблицы в отдельную схему, чтобы отделить их от «обычных» таблиц, но это вопрос личного вкуса.

0

Вместо перебора всех таблиц, можно отбросить всю схему и импорт снова:

DROP SCHEMA IF EXISTS ramu cascade; 
CREATE SCHEMA ramu; 
IMPORT FOREIGN SCHEMA ramu FROM SERVER ramsingh INTO ramu; 
Смежные вопросы