将数据从 redshift 传输到 postgresql
Transfer data from redshift to postgresql
我尝试搜索它但找不到
将数据从 Redshift 复制到 Postgresql 数据库的最佳方法是什么?
使用 Talend job/any 其他 tool/code 等
无论如何我想将数据从 Redshift 传输到 PostgreSQL 数据库
另外,您可以使用具有类似功能的任何第三方数据库工具。
此外,据我所知,我们可以使用 AWS 数据迁移服务,但不确定我们的源数据库和目标数据库是否符合该标准
谁能提出更好的建议?
我的方法是使用 Postgres 外部数据包装器和 dblink,
这样,redshift table 可直接在 Postgres 中使用。
按照此处的说明进行设置https://aws.amazon.com/blogs/big-data/join-amazon-redshift-and-amazon-rds-postgresql-with-dblink/
link 的重要部分是这段代码:
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;
过去,我设法将数据从一个 PostgreSQL 数据库传输到另一个数据库,方法是执行 pg_dump
并将输出作为 SQL 命令传输到第二个实例。
Amazon Redshift 基于 PostgreSQL,因此此方法也应该有效。
您可以控制 pg_dump
是否应该包括 DDL 来创建表,或者它是否应该只加载数据 (--data-only
)。
我尝试搜索它但找不到
将数据从 Redshift 复制到 Postgresql 数据库的最佳方法是什么?
使用 Talend job/any 其他 tool/code 等
无论如何我想将数据从 Redshift 传输到 PostgreSQL 数据库 另外,您可以使用具有类似功能的任何第三方数据库工具。
此外,据我所知,我们可以使用 AWS 数据迁移服务,但不确定我们的源数据库和目标数据库是否符合该标准
谁能提出更好的建议?
我的方法是使用 Postgres 外部数据包装器和 dblink,
这样,redshift table 可直接在 Postgres 中使用。
按照此处的说明进行设置https://aws.amazon.com/blogs/big-data/join-amazon-redshift-and-amazon-rds-postgresql-with-dblink/
link 的重要部分是这段代码:
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;
过去,我设法将数据从一个 PostgreSQL 数据库传输到另一个数据库,方法是执行 pg_dump
并将输出作为 SQL 命令传输到第二个实例。
Amazon Redshift 基于 PostgreSQL,因此此方法也应该有效。
您可以控制 pg_dump
是否应该包括 DDL 来创建表,或者它是否应该只加载数据 (--data-only
)。