16

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

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

4

4 回答 4

31

pg_dump的模式在过去可能不起作用,但现在可以。

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

CAVEAT EMPTOR: pg_dump仍然会产生一些 postgres 特定的语法,并且还会忽略表的 RedshiftSORTKEYDISTSTYLE定义。

另一个不错的选择是使用已发布的 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
;
于 2015-01-08T15:32:15.113 回答
4

我们目前正在通过 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

于 2013-04-30T15:38:54.107 回答
2

是的,您可以通过多种方式做到这一点。

  1. UNLOAD() 到 S3 存储桶 - 这是最好的。您几乎可以在任何其他机器上获取数据。(更多信息: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 将为您解决问题。

于 2017-05-27T10:27:47.870 回答
1

如果您使用的是 Mac,我使用的是 Postico,它运行良好。只需右键单击表,然后单击导出。

于 2016-05-02T16:49:40.777 回答