如何使用 plpgsql 循环函数从导入的外部模式创建表

How to create tables from imported foreign schema with plpgsql loop function

我正在尝试从通过导入外部模式导入到我的外部 table 中的所有 table 创建 table。 我想这样做的原因只是将数据从一个 PostgreSQL 服务器数据库复制到另一个。我知道我不会得到序列和其他 table 相关的索引,但没关系。 我不想做 pg_dump,所以我一直在尝试这样做,但到目前为止我对下面的代码还没有任何运气。

当我 运行 函数时,查询是 运行ning,但是 table 似乎没有开始在我的数据库中创建,我很难是时候弄清楚我的功能是否真的有效了。

DROP FUNCTION gv.create_tables_from_foreign_schema(character varying,character varying);

CREATE OR REPLACE FUNCTION gv.create_tables_from_foreign_schema(_foreign_schema character varying, _local_schema character varying)
  RETURNS void AS
$BODY$
declare
    selectrow record;
begin
for selectrow in
select 'CREATE TABLE ' || quote_ident(_local_schema) || '.' ||quote_ident(t.table_name) || ' AS SELECT * FROM ' || quote_ident(_foreign_schema) || '.' ||quote_ident(t.table_name) || '' AS qry 
from (
     SELECT table_name 
     FROM information_schema.tables
     WHERE table_schema = _foreign_schema
     )t
loop
execute selectrow.qry;
end loop;
end;
$BODY$
  LANGUAGE plpgsql

SELECT gv.create_tables_from_foreign_schema('gv_import_fra_pgv_2018a', 'gv')

这个功能对你有意义吗?

函数看起来没问题。

我怀疑一切都很好;您看不到任何新表,因为事务尚未完成。如果您查看数据目录,您应该会看到正在创建和写入的新文件。