如何将数据从S3加载到PostgreSQL RDS

时间:2017-11-21 00:29:53

标签: postgresql amazon-s3 amazon-rds

我需要将数据从S3加载到Postgres RDS(大约50-100 GB)我没有选择使用AWS Data Pipeline我正在寻找类似于使用COPY命令加载数据的东西S3进入Amazon Redshift。

我很感激有关如何实现这一目标的任何建议。

3 个答案:

答案 0 :(得分:1)

http://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html

  

使用COPY命令从数据文件中并行加载表   亚马逊S3。您可以使用Amazon指定要加载的文件   S3对象前缀或使用清单文件。

     

使用前缀指定要加载的文件的语法为   如下:

copy <table_name> from 's3://<bucket_name>/<object_prefix>'
authorization;

<强>更新

另一种选择是安装s3并使用COPY命令使用直接路径到csv。我不确定它是否能有效保持100GB,但值得尝试。关于软件的Here is some list选项。

另一种选择是将s3文件逐个“{3}”解析为文件,并从命名管道with something described here

解析COPY

最简单的选择就是将文件下载到本地存储并使用COPY我根本不介绍

另外值得一提的是described here(状态不稳定)。 s3_fdw非常简洁,但我认为你可以创建一个导致s3文件的外表。这本身意味着您可以将数据加载到其他关系......

答案 1 :(得分:0)

复制命令适用于Redshift数据库表,不适用于RDS。

为了从S3加载RDS表,这是命令

从S3's3:// Bucket_name / Foldername'加载数据  INTO TABLE schemaname.table_name;

按照[链接]

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.LoadFromS3.html

答案 2 :(得分:0)

最初,此答案试图将S3用于Postgres RDS功能。整个企业都失败了(见下文)。

我终于能够做到这一点的方法是:

  1. 设置安装了psql的EC2实例(请参见帖子结尾附近的内容)
  2. 复制相关的CSV文件以从S3导入到本地实例
  3. 使用psql / copy命令向上导入文件

这最后一部分确实非常重要。如果使用SQL COPY命令,则整个RDS Postgres角色结构将使您无休止。它有一个奇怪的SUPERRDSADMIN角色,这根本不是非常出色。但是,如果使用psql / copy commany,则显然可以执行任何操作。我已经确认是这种情况,并成功开始了我的上传。我将返回并重新编辑这篇文章(在时间允许的情况下)以添加上述内容的相关文档步骤。

  

Caveat Emptor::下面的帖子是我为实现此目的所做的所有原始工作。尽管进行了多方努力(包括只能称为AWS的可悲技术支持),但我不想掩盖领先优势。我不认为此功能已经准备就绪。尽管测试环境非常简单,易于复制,但AWS并未提供一种有效的方法来避免复制语句如下:

     
    

aws_s3.table_import_from_s3(...)的实际调用报告了RDS和S3之间的权限问题。根据我对psql的研究工作,这似乎是一个C库,可能是由AWS安装的。

         
      

注意:CURL错误代码:尝试验证预签名URL时28,剩余1次尝试       注意:提示:确保您的实例能够与S3连接。

    
  

现在已添加S3到Postgres RDS功能

2019年4月24日,AWS发布了允许Postgres RDS直接从S3加载的功能。您可以阅读公告here,并查看文档页面here

我正在与OP分享,因为这似乎是AWS支持的解决所提出问题的方式。

关键要点:

  • 需要Postgres 11.1或更高版本
  • 需要访问psql并将其连接到RDS实例的能力
  • 需要安装aws_s3的{​​{1}}扩展名。
  • 您可以通过指定凭据或将IAM角色分配给RDS来进入S3存储桶
  • 它宣传支持与postgres aws_commons命令相同的所有数据格式
  • 当前似乎一次仅支持一个文件(即不支持正则表达式)

这些说明相当详细,并提供了各种配置路径(AWS CLI脚本,控制台说明等)。此外,使用IAM密钥而不需要设置角色的选项很不错。

我没有找到仅下载COPY的方法,因此我不得不将完整的postgres安装降低到我的Mac,但这与brew没什么大关系:

  

psql

由于未激活数据库服务,因此这是获取psql的最快方法。

  

更新:决定在我的Mac上安装psql是一个安全漏洞,端口转发等。我发现在AMI Extras rubric下有一个简单的Postgres安装可用于AMI Linux 2。 。在您的ami实例类型上,install命令非常简单。

     

brew install postgres

sudo amazon-linux-extras install postgresql10非常易于使用,但是要记住,psql本身对psql的任何指令都被\转义。可以在here上找到psql上的文档。建议至少执行一次,然后再执行AWS推荐的脚本。

只要您具有严格的安全性并可以严格限制对RDS实例的访问权限(我这样做),请不要忘记打开从运行Postgres的AMI实例到RDS实例的端口。

如果您的偏好是GUI,则可以尝试使用PGAdmin4。根据文档,这是AWS建议的连接RDS Postgres实例的方法。我无法使用任何SSH隧道功能(这就是为什么我最终完成了用于psql的localhost SSH映射的原因)。我还发现它在其他方面还很麻烦。阅读该产品的评论,似乎版本4可能不是最稳定的版本。