Есть ли способ сделать дамп SQL из Amazon Redshift

Есть ли способ сделать дамп SQL из Amazon Redshift?

Не могли бы вы использовать клиент SQL Workbench/J?

4 ответа

Решение

В настоящее время мы успешно используем Workbench/J с Redshift.

Что касается дампов, на данный момент в Redshift нет инструмента экспорта схемы (pg_dump не работает), хотя данные всегда можно извлечь с помощью запросов.

Надеюсь помочь.

РЕДАКТИРОВАТЬ: Помните, что такие вещи, как ключи сортировки и распределения не отражаются в коде, сгенерированном Workbench/J. Взгляните на системный стол pg_table_def чтобы увидеть информацию о каждом поле. Здесь указывается, является ли поле сортировочным ключом или distkey, и такая информация. Документация на этом столе:

http://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html

pg_dump из схем, возможно, не работал в прошлом, но это работает сейчас.

pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql

ПУСТЬ ПОКУПАТЕЛЬ БУДЕТ БДИТЕЛЕН: pg_dump все еще производит некоторый определенный синтаксис postgres, а также игнорирует Redshift SORTKEY а также DISTSTYLE определения для ваших таблиц.

Другим достойным вариантом является использование опубликованных представлений сценариев администратора AWS для создания вашего DDL. Он обрабатывает SORTKEY/DISTSTYLE, но я обнаружил, что он содержит ошибки, когда дело доходит до захвата всех FOREIGN KEYs, и не обрабатывает разрешения / владельцев таблиц. Ваш пробег может варьироваться.

Чтобы получить дамп самих данных, вам все равно нужно использовать UNLOAD Команда на каждом столе, к сожалению.

Вот способ создать это. Быть в курсе, что select * синтаксис потерпит неудачу, если ваша таблица назначения не имеет тот же порядок столбцов, что и ваша исходная таблица:

select
  ist.table_schema,
  ist.table_name,
  'unload (''select col1,col2,etc from "' || ist.table_schema || '"."' || ist.table_name || '"'')
to ''s3://SOME/FOLDER/STRUCTURE/' || ist.table_schema || '.' || ist.table_name || '__''
credentials ''aws_access_key_id=KEY;aws_secret_access_key=SECRET''
delimiter as '',''
gzip
escape
addquotes
null as ''''
--encrypted
--parallel off
--allowoverwrite
;'
from information_schema.tables ist
where ist.table_schema not in ('pg_catalog')
order by ist.table_schema, ist.table_name
;

Да, вы можете сделать это несколькими способами.

  1. РАЗГРУЗИТЬ () в ведро S3 - вот лучшее. Вы можете получить свои данные практически на любой другой машине. (Более подробная информация здесь: http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)

  2. Передайте содержимое вашей таблицы в файл данных, используя имеющийся у вас экземпляр Linux. Итак, работает:

    $> psql -t -A -F 'your_delimiter' -h 'имя хоста' -d 'база данных' -U 'пользователь' -c "select * from myTable" >> /home/userA/tableDataFile поможет вам.

Если вы используете Mac, я использую Postico, и он отлично работает. Просто щелкните правой кнопкой мыши по таблице и выберите Экспорт.

Другие вопросы по тегам