Есть ли способ сделать дамп 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
;
Да, вы можете сделать это несколькими способами.
РАЗГРУЗИТЬ () в ведро S3 - вот лучшее. Вы можете получить свои данные практически на любой другой машине. (Более подробная информация здесь: http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)
Передайте содержимое вашей таблицы в файл данных, используя имеющийся у вас экземпляр Linux. Итак, работает:
$> psql -t -A -F 'your_delimiter' -h 'имя хоста' -d 'база данных' -U 'пользователь' -c "select * from myTable" >> /home/userA/tableDataFile поможет вам.
Если вы используете Mac, я использую Postico, и он отлично работает. Просто щелкните правой кнопкой мыши по таблице и выберите Экспорт.