postgresql 将数据从postgres卸载到s3

2uluyalo  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(4)|浏览(136)

我试图从postgres数据库中卸载一个表数据到amazon s3。
我知道redshift有一个卸载到s3的选项-因为redshift是一个postgres数据库,我试图在我的postgres数据库中使用相同的命令,但没有成功。
有人能帮我定期从postgres卸载表数据到s3吗?

du7egjpx

du7egjpx1#

Redshift基于PostgreSQL克隆,但没有1-1的功能对应关系。如果你想通过S3从PostgreSQL DB加载数据到Redshift,你应该:
1.将数据从PostgreSQL卸载到CSV文件。要做到这一点,请使用psql的copy命令。另请参阅此问题here
1.在S3上复制CSV文件。有不同的方法可以执行此操作,但请查看文档here
1.使用COPY命令将数据从S3加载到Redshift

6mzjoqzu

6mzjoqzu2#

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

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。

nhaq1z21

nhaq1z213#

我使用了下面的代码片段:

UNLOAD ('SELECT * FROM my_table') TO 's3://my-bucket/path' credentials 'aws_access_key_id=*****;aws_secret_access_key=*****' parallel off delimiter ',' ALLOWOVERWRITE ADDQUOTES HEADER ESCAPE gzip;

您还可以查看以下链接:
https://docs.aws.amazon.com/redshift/latest/dg/t_Unloading_tables.htmlhttps://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html

pb3skfrl

pb3skfrl4#

要将数据从PostgreSQL RDS示例导出到S3,请使用aws_s3扩展:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/postgresql-s3-export.html

CREATE EXTENSION aws_s3 CASCADE;

SELECT * from aws_s3.query_export_to_s3('select * from sample_table', 
   aws_commons.create_s3_uri('sample-bucket', 'sample-filepath', 'us-west-2')
);

相关问题