我正在尝试通过导入外部模式从已导入到我的外部表中的所有表创建表。 我想这样做的原因只是将数据从一个PostgreSQL服务器数据库复制到另一个数据库。我知道我不会得到序列和其他与表相关的索引,但这没关系。 我不想做pg_dump,所以我一直在尝试这样做,但到目前为止,我对下面的代码没有任何运气。
当我运行函数时,查询正在运行,但似乎没有开始在我的数据库中创建表,我很难弄清楚我的函数是否真的在工作。
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')
该函数对您有意义吗?
函数看起来不错。
我怀疑一切都很好;你看不到任何新表,因为事务还没有完成。如果查看数据目录,应会看到正在创建和写入的新文件。