【问题标题】:Import/ Copy csv file into PostgreSQL | File not on local Server将 csv 文件导入/复制到 PostgreSQL |文件不在本地服务器上
【发布时间】:2017-07-31 21:54:43
【问题描述】:

我正在尝试将我的 csv 文件导入/复制到 PostgreSQL。但是,我遇到了这些错误。我没有文件的导入/写入权限。 stdin 有帮助吗? Postgres 文档没有提供示例。此后我被要求进行批量插入,但由于具有混合数据类型的列太多,我不确定如何进一步进行。

复制 csv 文件的命令:

COPY sales.sales_tickets 
FROM 'C:/Users/Nandini/Downloads/AIG_Sales_Tickets.csv' 
DELIMITER ',' CSV;

错误:必须是超级用户才能复制到文件或从文件复制
提示:任何人都可以复制到标准输出或从标准输入。 psql 的 \copy 命令也适用于任何人。
1 条语句失败。

批量插入的命令太耗时:

insert into sales.sales_ticket values (1,'2',3,'4','5',6,7,8,'9',10','11');

请提出建议。谢谢。

【问题讨论】:

    标签: sql postgresql csv import


    【解决方案1】:

    来自PostgreSQL docummentation on COPY:

    COPY 命名文件或命令只允许数据库超级用户,因为它允许读取或写入服务器有权访问的任何文件。

    在 COPY 命令中命名的文件直接由服务器读取或写入,而不是由客户端应用程序读取或写入。因此,它们必须驻留在数据库服务器机器上或可由其访问,而不是客户端。它们必须可由 PostgreSQL 用户(服务器运行的用户 ID)而非客户端访问和读写。同样,用 PROGRAM 指定的命令由服务器直接执行,而不是由客户端应用程序执行,必须由 PostgreSQL 用户执行。 COPY 命名文件或命令只允许数据库超级用户使用,因为它允许读取或写入服务器有权访问的任何文件。

    您尝试使用COPY 命令违反了两个要求:

    1. 您正试图从非超级用户执行COPY 命令。
    2. 您正在尝试读取客户端计算机上的文件,并将其复制到服务器。

    这行不通。如果你需要执行这样的COPY,你需要:

    1. 将CSV文件复制到服务器;到执行 PostgreSQL 服务器进程的(系统)用户可以读取的目录。
    2. 从超级用户帐户执行COPY 命令。

    替代方案

    如果您无法做到其中一些,您始终可以使用pgAdmin 4 之类的工具并使用它的Import/Export functionality

    另见How to import CSV file data into a PostgreSQL table?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多