gpt4 book ai didi

postgresql - 如何从 EC2 Linux 实例加载数据到 Postgresql RDS

转载 作者:行者123 更新时间:2023-11-29 13:32:30 26 4
gpt4 key购买 nike

我正在运行一个 EC2 实例(运行 Postgresql 的 AMAZON LINUX X64),需要从 EC2 获取一个文件并将其加载到在 RDS 上运行的 Postgresql 数据库中。我不确定该怎么做,有人有这样做的经验吗?或者有人可以向我指出说明、白皮书等。

提前谢谢你..

最佳答案

迟到总比不到好:-)

我发现到目前为止,最简单的方法是使用“COPY FROM”命令从 Web 服务器或基于文件的端点加载数据

Postgres manual for copy

实例

假设您有以下 CSV 数据:

1,Fred,Flintstone
2,Barney,Rubble
3,Willma,Flintstone
4,Betty,Rubble

列分别为 pkid、firstname 和 surname

如果您在 Web 服务器上创建此文件(可能是您在本地运行但可以从外部访问的服务器),那么您应该能够键入:

http://myserver.blah/flintstones.csv

进入您的浏览器并查看文件出现。

一旦你能够做到这一点,并假设你使用的服务器是面向公众的(这样亚马逊的服务器就可以看到它),那么你需要启动一个工具,比如 PGAdmin 或任何其他允许你运行的工具sql 在你的 postgres 安装上。

如何运行这些命令是一个有争议的问题,我过去使用过各种方法。

一个非常有效的方法是在您的 Amazon 设备主机上设置 ssh 登录,然后使用 SSH 客户端允许您从本地主机隧道连接到 RDS 实例,这样做允许您使用程序,例如PG管理员。

如果你不能使用隧道,那么你总是可以一起破解一个快速的 ruby​​/php/nodejs 脚本,它允许你运行你需要的 2 个 sql 命令。

一旦您能够对 RDS 实例运行 SQL 命令,您需要做两件事:

  • 1) 创建目标表
  • 2) 使用复制命令导入数据

创建目标表很容易,这只是一个简单的创建表命令。

以我们的例子为例:

CREATE TABLE theflintstones
(
pkid integer primary key,
firstname text,
surname text
)

第二个命令有点棘手

如果您要从文件系统加载数据,则需要确保将 CSV 文件复制到 RDS 有权访问的文件系统位置。

然而,根据我过去的经验,我不记得曾经访问过 RDS 实例上的直接文件系统,因此您很可能不得不使用远程 http 方法。

使用http方式的问题在于rds实例可能没有安装wget或者curl工具。

在实践中,我还没有遇到过至少没有安装 wget 的,因为底层操作系统经常需要 wget 来从网络上获取它需要的东西。通常也会安装 curl。

准备好导入数据后,您需要使用以下命令:

COPY theflintstones FROM PROGRAM 'curl -s http://myserver/flintstones.csv' WITH(format csv)

“myserver”应替换为您存储 CSV 数据文件的网址或 IP 地址,“flintstones.csv”应替换为您要加载的实际文件名。

'curl -s [url]' 用于在静默模式下运行 curl,如果您必须使用 wget 那么您应该将程序指定为 'wget -qO- [url ]' 而不是

如果一切顺利,postgres 应该从远程源加载 CSV,然后使用该文件的内容填充表中的列。

如果您只需要填充表中的某些列,则使用表和列语法:

COPY table(column, column, column ... )

并且 csv 将只填充那些命名的列,将其余列设置为默认值。

关于postgresql - 如何从 EC2 Linux 实例加载数据到 Postgresql RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20303343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com