使用MySQL外部数据包装器在PostgreSQL中有一个很好的技巧,使您能够快速地告诉Postgres关于MySQL数据库中所有表的信息。其内容如下:
IMPORT FOREIGN SCHEMA my_favourite_database FROM SERVER mysql_server INTO public;
没有模拟DROP FOREIGN SCHEMA。虽然可以对每个表执行零碎的DROP FOREIGN TABLE操作,但这也需要知道外部数据库中所有表的名称。我也不确定这个命令是否真的是DROP在外部数据库中的表,还是仅仅是与它的连接。
怎样才能自动解决这个问题。
我认为同样的方法也适用于PostgreSQL中的任何外部数据包装器。
发布于 2016-11-22 07:47:00
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'选择查询
我还会将所有这些外国表放在一个单独的模式中,以便将它们从“常规”表中分离出来--但这是个人品味的问题。
发布于 2017-05-15 19:28:14
与遍历所有表不同,您可以删除整个模式并再次导入:
DROP SCHEMA IF EXISTS ramu cascade;
CREATE SCHEMA ramu;
IMPORT FOREIGN SCHEMA ramu FROM SERVER ramsingh INTO ramu;https://stackoverflow.com/questions/40728788
复制相似问题