pg_dump
de esquemas pode não ter funcionado no passado, mas funciona agora. pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql
CAVEAT EMPTOR:
pg_dump
ainda produz alguma sintaxe específica do postgres e também negligencia o Redshift SORTKEY
e DISTSTYLE
definições para suas tabelas. Outra opção decente é usar o AWS publicado visualizações de script de administração para gerar seu DDL. Ele lida com o SORTKEY/DISTSTYLE, mas descobri que ele é problemático quando se trata de capturar todas as FOREIGN KEYs e não lida com permissões/proprietários de tabela. Sua milhagem pode variar.
Para obter um despejo dos dados em si, você ainda precisa usar o
UNLOAD
comando
em cada mesa, infelizmente. Aqui está uma maneira de gerá-lo. Esteja ciente de que
select *
sintaxe falhará se sua tabela de destino não tiver a mesma ordem de coluna que sua tabela de origem: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
;