有没有办法从 Amazon Redshift 进行 SQL 转储?
您可以使用 SQL 工作台/J 客户端吗?
pg_dump
的模式在过去可能不起作用,但现在可以。
pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql
CAVEAT EMPTOR: pg_dump
仍然会产生一些 postgres 特定的语法,并且还会忽略表的 RedshiftSORTKEY
和DISTSTYLE
定义。
另一个不错的选择是使用已发布的 AWS 管理脚本视图来生成 DDL。它处理 SORTKEY/DISTSTYLE,但我发现它在捕获所有外键时有问题,并且不处理表权限/所有者。您的里程可能会有所不同。
要获得数据本身的转储,不幸的是,您仍然需要在每个表上使用该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
;
我们目前正在通过 Redshift 成功使用 Workbench/J。
关于转储,当时 Redshift 中没有可用的模式导出工具(pg_dump 不起作用),尽管始终可以通过查询提取数据。
希望有所帮助。
编辑:请记住,排序和分配键之类的内容不会反映在 Workbench/J 生成的代码上。查看系统表pg_table_def
以查看每个字段的信息。它说明一个字段是 sortkey 还是 distkey,以及此类信息。该表上的文档:
http://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html
是的,您可以通过多种方式做到这一点。
UNLOAD() 到 S3 存储桶 - 这是最好的。您几乎可以在任何其他机器上获取数据。(更多信息:http: //docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)
使用您拥有的 Linux 实例将表的内容通过管道传输到数据文件。所以,运行:
$> psql -t -A -F 'your_delimiter' -h 'hostname' -d 'database' -U 'user' -c "select * from myTable" >> /home/userA/tableDataFile 将为您解决问题。
如果您使用的是 Mac,我使用的是 Postico,它运行良好。只需右键单击表,然后单击导出。