【问题标题】:Copying to PostgreSQL database from a CSV on a server从服务器上的 CSV 复制到 PostgreSQL 数据库
【发布时间】:2015-02-03 07:07:27
【问题描述】:

我正在尝试使用下载到服务器的 CSV 文件更新 PostgreSQL 数据库。我已经尝试了很多小时,它在本地完美运行,但无法让它在服务器上运行。这是我的命令:

path = "/data/reporting/releases/20150202181737/data/storyboards.csv"

sql = "COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM \'#{path}\' DELIMITER ',' CSV;"

ActiveRecord::Base.connection.execute(sql)

这是错误信息:

COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM '/data/reporting/releases/20150202181737/data/storyboards.csv' DELIMITER ',' CSV;
PG::InsufficientPrivilege: ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
: COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM '/data/reporting/releases/20150202181737/data/storyboards.csv' DELIMITER ',' CSV;
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
: COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM '/data/reporting/releases/20150202181737/data/storyboards.csv' DELIMITER ',' CSV;

您能否推荐一个解决此问题的方法,因为我确信我不是唯一一个尝试这样做的人。我在 Engineyard 上托管我的应用程序。这是 Engineyard 配置问题吗?

【问题讨论】:

    标签: ruby database postgresql csv engineyard


    【解决方案1】:

    如果您想将数据从客户端的 CSV 复制到服务器,那么应​​该没有问题。您可以使用 psql 客户端及其 @ 987654322@ 命令。由于它在本地文件系统上运行,因此只要您可以访问本地文件路径,您就不会遇到任何问题。

    要在服务器上复制 CSV,您必须是 超级用户,如错误所示。

    基于this answer,看起来 postgres 用户被配置为 Engineyard 中的 superuser,所以如果您使用那个用户,你应该没事。

    这需要与 Rails 中的普通应用程序连接分开连接,因为这可能不会使用 postgres 用户,而是您为应用程序创建的任何用户(因为出于各种原因,您的应用通常不应以超级用户权限运行)。

    除非这是某种自动化工作流程的一部分, 必须是服务器端的,否则我建议您使用 \copy 中的 psql

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多