完整的PostgreSQL newb。
我在db1中有7-8个数据视图,我需要将它们复制到具有匹配模式的表中(模式?)在另一个数据库db2中。目标数据库可以是相同的PostgreSQL实例,也可以是完全位于不同机器上的实例。
对于我熟悉的数据库,我知道有2-3种不同的方法来实现这一点,但在这一点上我无能为力。有人能给我提一些基本的策略吗?
在一个完美的世界里,我不想做任何让人感觉太过ETL的事情--我宁愿做一些
SELECT FROM instance1.db1.viewname INTO instance2.db5.tablename
然后将数据以文本文件的形式从视图中转储出来,并重新加载到目标表中。
因为我不了解PostgreSQL,所以我真的不知道什么是可能的。
发布于 2011-11-06 13:31:01
您不需要为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是一种方便的图形用户界面。再次删除源数据库中的空表。使用以下命令加载数据
COPY tbl1 FROM '/var/lib/postgres/myfile1.csv';
就像@wildplasser描述的那样,转储/恢复是另一种方式。
对于一次性传输,建议使用其中一种方法。对于重复应用,dblink或SQL/MED (外部数据管理)可能更合适。
发布于 2011-11-06 02:13:37
CREATE TEMPORARY TABLE mytmp
AS SELECT * from myview
WHERE 1=1
;
COPY mytmp TO '/tmp/test.csv'
;
更好的方法是:
https://stackoverflow.com/questions/8022061
复制相似问题