我有一个使用Amazon's RDS服务托管的数据库,并尝试编写一个Web服务来更新该数据库。我的问题在于它不允许我使用COPY命令,因为会出现这个错误:“ERROR:必须是超级用户才能将文件复制到或从文件中复制”。 我正在使用为该数据库创建的唯一用户,并且我相当确定它具有超级用户访问权限。但是,我可以使用PGAdmin的导入工具导入数据,查看日志时,几乎使用与我相同的命令。唯一的区别是它没有文件路径,而是使用stdin。我该如何解决这个错误?
我有一个使用Amazon's RDS服务托管的数据库,并尝试编写一个Web服务来更新该数据库。我的问题在于它不允许我使用COPY命令,因为会出现这个错误:“ERROR:必须是超级用户才能将文件复制到或从文件中复制”。 我正在使用为该数据库创建的唯一用户,并且我相当确定它具有超级用户访问权限。但是,我可以使用PGAdmin的导入工具导入数据,查看日志时,几乎使用与我相同的命令。唯一的区别是它没有文件路径,而是使用stdin。我该如何解决这个错误?
您正在使用:
COPY tablename FROM 'filename';
这样做不行 - RDS不知道 'filename' 是什么。
你必须使用 psql
命令的 \copy
,它从本地客户端复制,或者使用 PgAdmin-III 的 "导入数据" 选项。
不使用 psql
的解决方法:
1)使用简单的复制命令将数据导入到临时表中。
2)在 pgAdmin III 对象浏览器中右键单击表,选择“备份...”。
3) 将格式设置为纯文本并将文件保存为 .sql 文件
4) 点击转储选项#1选项卡并检查数据
5) 点击Dump Options #2选项卡,勾选Use Column Inserts和Use Insert Commands
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"