如何从 Postgres 导出包含大对象的数据,然后将导出的数据导入 Greenplum

How to export data including large objects from Postgres and later import the exported data to Greenplum

我不想使用 pg_dump 将数据导出到 sql 脚本,因为当我有大量数据要导入时,将它提供给 greenplum 集群太慢了。因此,似乎首选使用 greenplum 的 gpfdist。有什么办法可以做到这一点吗?

或者作为替代方案,我可以将特定 Postgres table 的数据导出到包含 table 的大型对象的 CSV 格式文件中吗?

Accoridng to greenplum reference:

The simplest data loading method is the SQL INSERT statement...

You can use the COPY command to load the data into a table when the data is in external text files...

You can use a pair of Greenplum utilities, gpfdist and gpload, to load external data into tables...

不过,如果您想使用 csv 导入数据,您可以生成带有大对象“文件名”的 csv,加入您 table 反对 pg_largeobject。例如:

b=# create table lo (n text,p oid);
CREATE TABLE
b=# insert into lo values('wheel',lo_import ('/tmp/wheel.PNG'));
INSERT 0 1
b=#  copy (select lo.*, pg_largeobject.pageno, pg_largeobject.data from lo join pg_largeobject on lo.p = loid) to '/tmp/lo.csv' WITH (format csv, header);
COPY 20

生成的 /tmp/lo.csv 将具有 csv 格式的名称、oid 和数据 bytea。

pg_dump 将创建一个文件,该文件将使用 "COPY" 将数据加载回数据库。当加载到Greenplum中时,它会通过Master服务器加载,对于非常大的负载,它会成为一个瓶颈。是的,首选方法是使用 gpfdist,但您当然可以使用 COPY 将数据加载到 Greenplum。它不会以 gpfdist 可以达到的每小时 10+ TB 的速度加载,但它仍然可以达到每小时 1 到 2 TB。

另一种方法是使用gpfdist 执行程序来获取数据。它将针对 PostgreSQL 执行 SELECT 语句,以使其可用于 Greenplum 中的外部 Table。我为这个过程创建了一个包装器,叫做 "gplink"。你可以在这里查看:http://www.pivotalguru.com/?page_id=982