从PostgreSQL向S3卸载数据

7

我想将一个表中的数据从Postgres数据库导出到Amazon S3。

我知道Redshift有一个选项可以将数据导出到S3 - 由于Redshift是一个基于Postgres的数据库,我尝试在我的Postgres数据库中使用相同的命令,但不成功。

有人能帮助我定期将表中的数据从Postgres导出到S3吗?


COPY ... TO PROGRAM - Craig Ringer
如果您不是超级用户,请分成两个步骤:复制到文件aws s3 cp文件到存储桶 - Vao Tsun
4个回答

6

Redshift基于PostgreSQL克隆,但没有1对1的功能对应。如果您想从PostgreSQL数据库通过S3加载数据到Redshift,则应:

  1. 从PostgreSQL卸载数据到CSV文件。要做到这一点,请使用psql的copy命令。也可以参考这里的问题。
  2. 将CSV文件复制到S3上。有不同的方法来实现,但请查看此处的文档。
  3. 使用COPY命令将数据从S3加载到Redshift中。

2
在Redshift上,您可以创建一个表来接收数据: CREATE TABLE redshift_schema.redshift_table (...); 然后,在PostgreSQL RDS中创建外部数据包装器、服务器和表的虚拟幻影:
CREATE EXTENSION redshift_fdw;

----optional
--CREATE FOREIGN DATA WRAPPER redshift_fdw
--HANDLER postgres_fdw_handler
--VALIDATOR postgres_fdw_validator
--OPTIONS ();

CREATE SERVER redshift_server_mydb
FOREIGN DATA WRAPPER redshift_fdw
OPTIONS (dbname 'mydb', port '5439', connect_timeout '200000', host 'myhost.redshift.amazonaws.com');

CREATE USER MAPPING FOR mypguser
SERVER redshift_server_mydb
OPTIONS (user 'myrsuser', password 'mypassword');

IMPORT FOREIGN SCHEMA redshift_schema 
LIMIT TO (redshift_table) 
FROM SERVER redshift_server_mydb
INTO postgresql_schema;

现在在PostgreSQL中,您可以(如果您愿意)在一个函数中从PostgreSQL表中加载(选择、插入、更新、删除)Redshift表(而不使用dblink):
INSERT INTO postgresql_schema.redshift_table
SELECT *
FROM postgresql_schema.postgresql_table;

现在当您查看Redshift表时,所有数据都在那里,您可以根据需要将表卸载到S3。

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接