将CSV复制到托管在Amazon RDS上的Postgresql数据库

9

我有一个使用Amazon's RDS服务托管的数据库,并尝试编写一个Web服务来更新该数据库。我的问题在于它不允许我使用COPY命令,因为会出现这个错误:“ERROR:必须是超级用户才能将文件复制到或从文件中复制”。 我正在使用为该数据库创建的唯一用户,并且我相当确定它具有超级用户访问权限。但是,我可以使用PGAdmin的导入工具导入数据,查看日志时,几乎使用与我相同的命令。唯一的区别是它没有文件路径,而是使用stdin。我该如何解决这个错误?


感谢您展示了精确的错误信息文本以及使用RDS。将来,请还要显示生成错误的命令的确切文本。 - Craig Ringer
2个回答

15

您正在使用:

COPY tablename FROM 'filename';

这样做不行 - RDS不知道 'filename' 是什么。

你必须使用 psql 命令的 \copy,它从本地客户端复制,或者使用 PgAdmin-III 的 "导入数据" 选项。

RDS 手册详细介绍了这个过程


0

不使用 psql 的解决方法:

1)使用简单的复制命令将数据导入到临时表中。

2)在 pgAdmin III 对象浏览器中右键单击表,选择“备份...”。

Right click Table and select Backup..

3) 将格式设置为纯文本并将文件保存为 .sql 文件

Set Format to Plain

4) 点击转储选项#1选项卡并检查数据

Dump Options #1

5) 点击Dump Options #2选项卡,勾选Use Column Inserts和Use Insert Commands

Dump Options #2

6)点击备份按钮 7)现在,您可以打开SQL文件并在您的RDS服务器上运行它。 或者您可以使用以下命令生成SQL文件。
pg_dump --host localhost --port 5432 --username "postgres" --no-password  --format plain --section data --inserts --column-inserts --file "C:\test\test.sql" --table "public.envelopes" "testdb"

你的解决方案与将CSV文件上传到远程RDS服务器无关。人们想要这样做的原因是,它比运行SQL插入要快得多。将本来可以是CSV上传的内容更改为一系列插入并不能解决这个特定的问题。 - Chris Johnson
1
虽然这个解决方案没有解决我的问题,但是它给了我使用另一个工具来解决问题的思路。我成功地规避了与复制命令相关的权限问题,谢谢。 - Christopher Yang

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