有没有一种方法可以从Amazon Redshift进行SQL转储?

17

有没有一种方法可以从Amazon Redshift导出SQL转储文件?

您可以使用SQL Workbench / J客户端吗?


以下是一个亚马逊员工对此话题的评论:https://forums.aws.amazon.com/message.jspa?messageID=428466#428466 - Christopher Manning
如果您想在不保持数据完整性的情况下进行数据转移,甚至可以使用像dBeaver这样的IDE。使用其社区版即可实现。请注意:IDE数据导出容易出错;这是通过编程语言(例如Python/Bash)或其他付费工具来完成数据传输的任务。 - Utsav Jha
4个回答

33

pg_dump 对于数据库架构可能过去不能正常工作,但现在可以使用。

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

CAVEAT EMPTOR: pg_dump 仍会生成一些postgres特定的语法,并且忽略了Redshift表的SORTKEYDISTSTYLE定义。

另一个不错的选择是使用发布的AWS admin脚本视图来生成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
;

4

我们目前成功地使用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,并确认它可以正常工作。 - Kirill Fuchs
不确定你为什么说pg_dump不起作用;对我来说它很好用,尽管正如你所说的,对于Workbench/J,distkey/sortkey也不包括在内。 - congusbongus

2

是的,您可以通过几种方式进行操作。

  1. 将数据使用UNLOAD()导入到S3 Bucket中是最好的方法。您可以在几乎任何其他计算机上获取您的数据。 (更多信息请访问此处:http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

  2. 通过您的Linux实例将表格内容导入数据文件。因此,运行以下命令即可:

    $> psql -t -A -F 'your_delimiter' -h 'hostname' -d 'database' -U 'user' -c "select * from myTable" >> /home/userA/tableDataFile 这样就可以为您解决问题了。


1
如果您使用的是Mac电脑,我正在使用Postico,它非常好用。只需右键单击表格,然后单击导出即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接