将结果从一个数据库中的PostgreSQL视图复制到另一个数据库中的表中
完整的PostgreSQL newb。将结果从一个数据库中的PostgreSQL视图复制到另一个数据库中的表中
我有7-8个值的db1数据视图,我需要将数据复制到具有匹配schemae(模式?)的表中,并放在另一个数据库db2中。目标数据库可以是PostgreSQL的同一个实例,也可以是完全不同的盒子。
我知道2-3种不同的方式来完成这个与我熟悉的数据库,但我无奈这一个。有人能为我提出一些基本策略吗?
在一个完美的世界,我不希望做任何事情,感觉太ETL-ISH - 我宁愿做某种
SELECT FROM instance1.db1.viewname INTO instance2.db5.tablename
然后倾倒出来的数据视图的文本文件并重新加载到目标表中。
虽然我不知道PostgreSQL,但我并不真正了解可能性范围内的内容。
您不需要为COPY TO
创建临时表。任何查询都可以是源自自PostgreSQL 8.2以来的。
COPY (SELECT * FROM view1) TO '/var/lib/postgres/myfile1.csv';
阅读manual about COPY。在本地创建所需的表格
CREATE table tbl1 AS
SELECT * FROM view1
LIMIT 0; -- no data, just the schema.
复制DDL指令并在目标数据库中创建所有表。 pgAdmin是一个方便的GUI。再次删除源数据库中的空表。加载数据与
COPY tbl1 FROM '/var/lib/postgres/myfile1.csv';
转储/恢复像@wildplasser描述它,是另一种方式。
糟糕。我的错。但是复制一个视图文件仍然是不可能的:-) [这实际上是一个遗憾,因为规则系统允许构建可更新的视图] – wildplasser
CREATE TEMPORARY TABLE mytmp
AS SELECT * from myview
WHERE 1=1
;
COPY mytmp TO '/tmp/test.csv'
;
一个更好的方法是:
- 副本意见纳入表(表1创建为SELECT * FROM厂景; ...)
- 使用的pg_dump -t table1的-t表2。 .. mydbname> myfile.out
- 使用myfile.out重新创建并填充表格。
这种额外复制的原因是视图不能用作COPY语句的源或目标。创建表AS负责(大部分)数据类型。约束不会被复制到新表中。 – wildplasser
我会看看使用dblink。 –
感谢你们俩。 dblink_connect看起来正是我所需要的。但是,看起来这个功能并没有自动安装在我刚刚放在我的盒子上的发行版中。是否需要从pgAdmin内部启动某种命令才能安装它? –
没关系。发现它是一个扩展,我可以使用pgAdmin针对有问题的数据库进行安装。我正在运行。 –