Перенос данных из красного смещения в postgresql - PullRequest
0 голосов
/ 10 июня 2019

Я попытался найти его, но не смог найти

Каков наилучший способ скопировать данные из Redshift в базу данных Postgresql?

с помощью задания Talend / любого другого инструмента / кода,и т.д.

В любом случае, я хочу также перенести данные из Redshift в базу данных PostgreSQL, вы можете использовать любой сторонний инструмент для работы с базами данных, если он имеет аналогичные функции.

Кроме того, насколько я знаю,мы можем сделать это, используя AWS Служба переноса данных , но не уверены, что наши исходные базы данных и целевые базы данных соответствуют этим критериям или нет

Может кто-нибудь предложить что-нибудь лучше?

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

В прошлом мне удавалось передавать данные из одной базы данных PostgreSQL в другую, выполняя pg_dump и передавая выходные данные в виде команды SQL во второй экземпляр.

Amazon Redshift основан на PostgreSQL,поэтому этот метод тоже должен работать.

Вы можете контролировать, должен ли pg_dump включать DDL для создания таблиц или просто загружать данные (--data-only).

См.: PostgreSQL: Документация: 8.0: pg_dump

0 голосов
/ 10 июня 2019

Я делаю это с Postgres Foreign Data Wrapper и 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;
...