将csv文件导入/复制到PostgreSQL中文件不在本地服务器上

时间:2017-07-31 21:54:43

标签: sql postgresql csv import

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

复制csv文件的命令:

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

错误:必须是超级用户才能复制到文件或来自文件   提示:任何人都可以复制到stdout或stdin。 psql' s \ copy命令也适用于任何人   1声明失败。

批量插入的命令太长时间了:

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

请建议。谢谢。

1 个答案:

答案 0 :(得分:0)

来自PostgreSQL docummentation on COPY:

  

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

  

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

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

  1. 您尝试从非超级用户执行COPY命令。
  2. 您尝试在客户端计算机上读取文件,并将其复制到服务器。
  3. 这不会奏效。如果您需要执行此类COPY,则需要:

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

      如果您无法执行其中某些操作,则可以始终使用pgAdmin 4等工具并使用其Import/Export functionality

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