如何从 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
我不想使用 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