首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用外部数据包装器在PostgreSQL中删除外部模式

问使用外部数据包装器在PostgreSQL中删除外部模式
EN

Stack Overflow用户
提问于 2016-11-21 20:29:23
回答 2查看 6.5K关注 0票数 8

使用MySQL外部数据包装器在PostgreSQL中有一个很好的技巧,使您能够快速地告诉Postgres关于MySQL数据库中所有表的信息。其内容如下:

IMPORT FOREIGN SCHEMA my_favourite_database FROM SERVER mysql_server INTO public;

没有模拟DROP FOREIGN SCHEMA。虽然可以对每个表执行零碎的DROP FOREIGN TABLE操作,但这也需要知道外部数据库中所有表的名称。我也不确定这个命令是否真的是DROP在外部数据库中的表,还是仅仅是与它的连接。

怎样才能自动解决这个问题。

我认为同样的方法也适用于PostgreSQL中的任何外部数据包装器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-22 07:47:00

drop foreign table只删除“本地”外部表定义,而不删除远程服务器中的表。

可以使用一个简短的PL/pgSQL块删除所有外部表:

代码语言:javascript
复制
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'选择查询

我还会将所有这些外国表放在一个单独的模式中,以便将它们从“常规”表中分离出来--但这是个人品味的问题。

票数 12
EN

Stack Overflow用户

发布于 2017-05-15 19:28:14

与遍历所有表不同,您可以删除整个模式并再次导入:

代码语言:javascript
复制
DROP SCHEMA IF EXISTS ramu cascade;
CREATE SCHEMA ramu;
IMPORT FOREIGN SCHEMA ramu FROM SERVER ramsingh INTO ramu;
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40728788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档