将数据从 redshift 传输到 postgresql

Posted

技术标签:

【中文标题】将数据从 redshift 传输到 postgresql【英文标题】:Transfer data from redshift to postgresql 【发布时间】:2019-06-10 09:14:16 【问题描述】:

我尝试搜索但找不到

将数据从 Redshift 复制到 Postgresql 数据库的最佳方法是什么?

使用 Talend 作业/任何其他工具/代码等

无论如何我想将数据从 Redshift 传输到 PostgreSQL 数据库 此外,您可以使用任何具有类似功能的第三方数据库工具。

另外,据我所知,我们可以使用 AWS 数据迁移服务,但不确定我们的源数据库和目标数据库是否符合该标准

谁能推荐更好的?

【问题讨论】:

请注意,我们不会为您构建解决方案或代表您进行研究。请使用您实际尝试过的内容以及遇到的具体问题或错误来更新您的问题。 @I.TDelinquent 我改了 AWS DMS 不包含 Redshift 作为源的选项。 【参考方案1】:

我的做法是使用 Postgres 外部数据包装器和 dblink,

这样,红移表可以直接在 Postgres 中使用。

按照此处的说明进行设置https://aws.amazon.com/blogs/big-data/join-amazon-redshift-and-amazon-rds-postgresql-with-dblink/

该链接的重要部分是这段代码:

CREATE EXTENSION postgres_fdw;
CREATE EXTENSION dblink;
CREATE SERVER foreign_server
        FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (host '<amazon_redshift _ip>', port '<port>', dbname '<database_name>', sslmode 'require');
CREATE USER MAPPING FOR <rds_postgresql_username>
        SERVER foreign_server
        OPTIONS (user '<amazon_redshift_username>', password '<password>');

然后,对于我的用例,我设置了一个基于该索引的 postgres 物化视图。

create materialized view if not exists your_new_view as
SELECT some,
       columns,
       etc
   FROM dblink('foreign_server'::text, '
<the redshift sql>
'::text) t1(some bigint, columns bigint, etc character varying(50));

create unique index if not exists index1
    on your_new_view (some);

create index if not exists index2
    on your_new_view (columns);

然后我定期运行(在 postgres 上)

REFRESH MATERIALIZED VIEW your_new_view;

REFRESH MATERIALIZED VIEW CONCURRENTLY your_new_view;

【讨论】:

但我必须为所有架构和表执行这些操作 正确,每个你想要的。根据您的用例,如果您能找到一个不同的解决方案,您可能更喜欢不同的解决方案。我不知道(DMS 不起作用)。也许考虑一下您为什么要传输数据并将该信息添加到您的问题中。【参考方案2】:

过去,我通过执行pg_dump 并将输出作为 SQL 命令传送到第二个实例,设法将数据从一个 PostgreSQL 数据库传输到另一个。

Amazon Redshift 基于 PostgreSQL,所以这个方法也应该可以。

您可以控制pg_dump 是否应包含用于创建表的 DDL,或者是否应仅加载数据 (--data-only)。

见:PostgreSQL: Documentation: 8.0: pg_dump

【讨论】:

以上是关于将数据从 redshift 传输到 postgresql的主要内容,如果未能解决你的问题,请参考以下文章