如何将S3中的数据文件导入到PostgreSQL RDS?

39

我对AWS和Postgresql非常陌生。

  1. 我已经创建了一个Postgresql数据库(使用AWS上的RDS)。
  2. 我已将多个文档上传到多个S3存储桶中。
  3. 我正在运行Amazon Linux 64位的EC2实例。

我尝试使用数据管道,但似乎没有可用于Postgres的模板。我无法弄清如何连接到我的RDS实例并导入/导出Postgres中的数据。

我认为可以使用EC2从我的S3存储桶中获取数据,并导入到Postgres中,以代替没有数据管道模板的情况。如果可能,请指导我如何操作。


4
理想情况下,亚马逊希望扩展 COPY 命令以支持 S3 URL 文件路径,但如果目前需要通过客户端从 S3 拉取数据并通过 COPY 提供给 PostgreSQL,我也不会感到意外。 - Craig Ringer
1
是的,使用RDS,通常需要从EC2实例加载。只有像Redshift这样的自定义数据库系统才倾向于允许直接从s3加载。 - datasage
1
谢谢你们两个。你们能否提供一些如何完成这个任务的例子吗?我已经成功连接了EC2和S3以及EC2和RDS。我有一个想法,可以从S3将文件下载到EC2,但此时我不知道如何将文件从EC2加载到运行在res上的Postgresql数据库中。请帮忙或指导我如何操作。我已经在网上搜索了几天了。 - user3044239
4个回答

34

2
请问您能提供步骤吗?AWS文档有点不清楚,有些是在psql中,有些是普通命令,在哪里运行这些命令?在cmd中吗?您在此处提供的PSQL命令,它将如何理解要加载到哪个表中? - Aakash Basu
1
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html - Rodrigo Ney
你知道如何在通过S3导入时处理空的CSV文件吗?因为我有一个场景,其中CSV文件是从S3自动加载到Postgres RDS中的。有时会出现空的CSV文件,这会导致连接失败。 - Vignesh_A

27
我希望AWS能像在Redshift中那样扩展RDS Postgresql中的COPY命令。但目前为止,他们还没有这样做,我们必须自己处理它。
  1. 在您的EC2实例上安装awscli(可能已默认安装)
  2. 使用凭据配置您的awscli
  3. 使用aws s3 syncaws s3 cp命令将文件从S3下载到本地目录
  4. 使用psql命令将文件\COPY到您的RDS(需要\从客户端目录中复制)

例如:

aws s3 cp s3://bucket/file.csv /mydirectory/file.csv
psql -h your_rds.amazonaws.com -U username -d dbname -c '\COPY table FROM ''file.csv'' CSV HEADER'

3
这是否仍然有效,或者亚马逊现在已经更新了Redshift的功能?我有完全相同的问题,除了我需要自动化这个过程,并且每周从S3导入文件(.csv) 到我的PostGresql RDS实例。 - Spade Johnsson
RDS PostgreSQL基于社区PostgreSQL,而当前版本的社区PostgreSQL COPY语句不支持COPY FROM/TO S3。 https://www.postgresql.org/docs/10/static/sql-copy.html - hadooper
1
这已经不再是事实了,RDS现在通过aws_s3扩展支持从S3复制命令。请参见下面@quiver的答案。 - Adam Cooper

13

3
有人能否实际确认这是否适用于RDS Postgres?从Chris提供的文档中并不清楚S3到Postgres的支持情况。 - Luis Casillas
"现在可用于所有Amazon RDS数据库的AWS数据管道支持" https://aws.amazon.com/about-aws/whats-new/2015/08/aws-data-pipeline-support-for-all-amazon-rds-databases-now-available/ - tim-phillips

0
如果您能启动psql客户端并连接到EC2实例上的RDS,则应该能够使用以下命令:

\copy customer_orders from 'myfile.csv' with DELIMITER ','


4
它操作本地文件,而非S3上的文件。 - Chris Johnson

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