【问题标题】:Unload data from postgres to s3将数据从 postgres 卸载到 s3
【发布时间】:2017-07-31 10:12:45
【问题描述】:

我正在尝试将表数据从 postgres 数据库卸载到 amazon s3。

我知道 redshift 有一个卸载到 s3 的选项 - 由于 redshift 是一个 postgres 数据库,我尝试在我的 postgres 数据库中使用相同的命令,但没有成功。

有人可以帮我定期将表数据从 postgres 卸载到 s3 吗?

【问题讨论】:

  • COPY ... TO PROGRAM
  • 如果您不是超级用户,只需分成两步:copy to file 和 aws s3 cp file to bucket

标签: postgresql amazon-web-services amazon-s3 amazon-redshift


【解决方案1】:

为此我使用了以下代码-sn-p:

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.html https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html

【讨论】:

    【解决方案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 表时,所有数据都在那里,您可以根据需要将该表 UNLOAD 到 S3。

    【讨论】:

      【解决方案3】:

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

      1. 将数据从 PostgreSQL 卸载到 CSV 文件。为此,请使用 psql 的复制命令。另请参阅此问题here。
      2. 在 S3 上复制 CSV 文件。有不同的方法可以做到这一点,但请查看文档here
      3. 使用COPY 命令将数据从 S3 加载到 Redshift

      【讨论】:

        猜你喜欢
        • 2020-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 2018-03-22
        相关资源
        最近更新 更多