从Excel导入数据到PostgreSQL

我已经看到了与我现在要求的类似/相同的问题,但我无法解决在我的情况。

这是事情:我有一个Excel电子表格(.xlsx)我转换为逗号分隔值(.CSV),因为它在一些答案中说:

我的Excel文件看起来像这样:

-------------------------------------------------- name | surname | voteNo | VoteA | VoteB | VoteC -------------------------------------------------- john | smith | 1001 | 30 | 154 | 25 -------------------------------------------------- anothe| person | 1002 | 430 | 34 | 234 -------------------------------------------------- other | one | 1003 | 35 | 154 | 24 -------------------------------------------------- john | smith | 1004 | 123 | 234 | 53 -------------------------------------------------- john | smith | 1005 | 23 | 233 | 234 -------------------------------------------------- 

在PostgreSQL中,我创build了一个名为allfields的表,并创build了6列第一个和第二个字符[],最后4个与excel表中显示的名称相同的整数(name, surname, voteno, votea, voteb, votec)

现在我正在这样做:

 copy allfields from 'C:\Filepath\filename.csv'; 

但是我得到这个错误:

 could not open file "C:\Filepath\filename.csv" for reading: Permission denied SQL state: 42501 

我的问题是:

  1. 我应该在PostgreSQL的allfields表中创build这些列吗?
  2. 我必须修改Excel文件中的其他内容吗?
  3. 为什么我得到这个“权限被拒绝”的错误?

  1. 根据你的文件,前两列都不需要是一个数组types(character []) – 与Cstring不同,postgres中的“字符”types已经string了。 您可能想要使事情变得更简单,并使用varchar作为这两列的types。
  2. 我不认为你这样做。
  3. 检查你是否还没有打开该文件并将其locking在excel中 – 如果你在excel中做了一个“另存为”从xlsx转换为csv,那么你可能需要在excel中closures这个文件。

SQL状态: PostgreSQL中的42501表示您没有权限在预期的模式中执行此类操作。 这个错误代码列表显示。

检查你是否指向正确的模式,你的用户有足够的权限。

文档还指出 ,您需要在原始表上select特权并在目标表上插入特权。

您必须对通过COPY TO读取其值的表具有select权限,并且通过COPY FROM将值插入到表中。 在命令中列出的列上拥有列权限就足够了。

  1. 是的,我认为你可以。 对于COPY命令,有可选的HEADER子句。 检查http://www.postgresql.org/docs/9.2/static/sql-copy.html
  2. 我不这么认为。 我的#1和#3,它应该工作。
  3. 您需要超级用户权限。

1)我应该在PostgreSQL的allfields表中创build这些列吗?

使用字符字段的text 。 不是任何情况下的数组,正如@yieldsfalsehood指出的那样 。

2)我需要修改Excel文件中的其他内容吗?

没有。

3)为什么我得到这个“权限被拒绝”的错误?

这个文件需要你的系统用户postgres (或者你运行postgres服务器的用户)访问。 每个文档:

用文件名COPY指示PostgreSQL服务器直接读取或写入文件。 该文件必须可供服务器访问,并且必须从服务器的angular度指定该名称。

数据库用户的权限不是问题的原因。 然而(引用相同的页面):

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

关于权限问题,如果您使用psql来发出COPY命令,请尝试使用\copy

好的问题是,我需要改变Excel filepath 。 我把它插入 所有用户都可以访问公共账号中。

如果你遇到同样的问题,把你的excel file移动到ex C:\\User\Public文件夹(这个文件夹是一个没有任何限制的公用文件夹),否则你必须处理Windows permission issues