有没有办法从Amazon Redshift进行SQL转储?
您可以使用SQL workbench / J客户端吗?
答案 0 :(得分:24)
pg_dump
模式在过去可能没有用,但现在确实有效。
pg_dump -Cs -h my.redshift.server.com -p 5439 database_name > database_name.sql
CAVEAT EMPTOR: pg_dump
仍会产生一些特定于postgres的语法,并且忽略了表格的Redshift SORTKEY
和DISTSTYLE
定义。
另一个不错的选择是use the published AWS admin script views来生成你的DDL。它处理SORTKEY / DISTSTYLE,但我发现它在捕获所有FOREIGN KEY时是错误的,并且不处理表权限/所有者。你的milage可能会有所不同。
要获取数据本身的转储,您仍然需要在每个表上使用UNLOAD
command。
这是一种生成它的方法。请注意,如果目标表与源表的列顺序不同,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 :(得分:2)
我们目前正在使用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
答案 2 :(得分:1)
是的,您可以通过多种方式实现。
UNLOAD()到S3 Bucket-这是最好的。您几乎可以在任何其他计算机上获取数据。 (此处有更多信息: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”>> /家庭/用户A / tableDataFile 会为你做的伎俩。
答案 3 :(得分:0)
如果你正在使用Mac,我使用的是Postico,效果很好。只需右键单击该表,然后单击“导出”。