在PostgreSQL中使用MySQL外部数据包装器有一个很好的技巧,可以让你快速告诉Postgres关于MySQL数据库中的所有表。它如下:
IMPORT FOREIGN SCHEMA my_favourite_database FROM SERVER mysql_server INTO public;
没有模拟DROP FOREIGN SCHEMA
。虽然DROP FOREIGN TABLE
可以对每个表进行零碎处理,但这也需要知道外部数据库中所有表的名称。我也不确定这个命令实际上DROP
是外国数据库中的表还是只是与它的连接。
如何自动接近这一点。
我认为相同的方法适用于PostgreSQL中的任何外部数据包装器
答案 0 :(得分:4)
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'
我还会将所有这些外来表放在一个单独的模式中,将它们与“常规”表格分开 - 但这是个人品味的问题。
答案 1 :(得分:1)
您可以删除整个架构并再次导入,而不是遍历所有表:
DROP SCHEMA IF EXISTS ramu cascade;
CREATE SCHEMA ramu;
IMPORT FOREIGN SCHEMA ramu FROM SERVER ramsingh INTO ramu;