2013-03-15 91 views
11

有没有办法从Amazon Redshift执行SQL转储?有没有办法从Amazon Redshift执行SQL转储

您可以使用SQL工作台/ J客户端吗?

+0

以下是亚马逊的评论主题:https://forums.aws.amazon.com/message.jspa?messageID = 428466#428466 – 2013-05-22 16:38:16

回答

2

我们目前正在使用Workbench/J成功搭配Redshift。

关于转储,当时在Redshift中没有可用的模式导出工具(pg_dump不起作用),尽管数据总是可以通过查询提取。

希望能提供帮助。

编辑:请记住,排序和分配键之类的东西不反映在由Workbench/J生成的代码上。看看系统表pg_table_def以查看每个字段的信息。它指出,如果一个字段是sortkey或distkey,以及这样的信息。文档该表:

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

+1

我成功使用Workbench/J并可以确认它的工作。 – 2013-05-14 22:12:43

+0

不确定你为什么说pg_dump不起作用;它对我来说工作得很好,虽然正如你所说的Workbench/J,distkey/sortkey也不包括在内。 – congusbongus 2014-08-01 06:39:08

23

模式的pg_dump可能不会在过去的工作,但现在这样。

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

买者自负:pg_dump仍然会产生一些Postgres的特定的语法,也忽略了红移SORTKEYDISTSTYLE定义为你的表。

另一个不错的选择是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 
; 
+0

确实,pg_dump现在可以工作 – gauravphoenix 2016-02-05 00:59:44

0

如果您使用的是Mac,我使用Postico和它的伟大工程。只需右键单击表格并单击导出。

1

是的,你可以通过几种方式来做到这一点。

  1. UNLOAD()到S3桶 - 这是最好的。您几乎可以在任何其他机器上获得您的数据。 (更多信息在这里:http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

  2. 使用您拥有的Linux实例将表中的内容传输到数据文件。 因此,运行:

    $> PSQL -t -a -f 'your_delimiter' -h '主机名' -D '数据库' -U '用户' “SELECT * FROM myTable的” -c >> /家庭/用户A/tableDataFile 将为你做的伎俩。

相关问题