从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
我的问题是:
- 我应该在PostgreSQL的
allfields
表中创build这些列吗? - 我必须修改Excel文件中的其他内容吗?
- 为什么我得到这个“权限被拒绝”的错误?
- 根据你的文件,前两列都不需要是一个数组types(character []) – 与Cstring不同,postgres中的“字符”types已经是string了。 您可能想要使事情变得更简单,并使用
varchar
作为这两列的types。 - 我不认为你这样做。
- 检查你是否还没有打开该文件并将其locking在excel中 – 如果你在excel中做了一个“另存为”从xlsx转换为csv,那么你可能需要在excel中closures这个文件。
SQL状态: PostgreSQL中的42501表示您没有权限在预期的模式中执行此类操作。 这个错误代码列表显示。
检查你是否指向正确的模式,你的用户有足够的权限。
文档还指出 ,您需要在原始表上select特权并在目标表上插入特权。
您必须对通过COPY TO读取其值的表具有select权限,并且通过COPY FROM将值插入到表中。 在命令中列出的列上拥有列权限就足够了。
- 是的,我认为你可以。 对于COPY命令,有可选的HEADER子句。 检查http://www.postgresql.org/docs/9.2/static/sql-copy.html
- 我不这么认为。 我的#1和#3,它应该工作。
- 您需要超级用户权限。
1)我应该在PostgreSQL的allfields表中创build这些列吗?
使用字符字段的text
。 不是任何情况下的数组,正如@yieldsfalsehood指出的那样 。
2)我需要修改Excel文件中的其他内容吗?
没有。
3)为什么我得到这个“权限被拒绝”的错误?
这个文件需要你的系统用户postgres
(或者你运行postgres服务器的用户)访问。 每个文档:
用文件名
COPY
指示PostgreSQL服务器直接读取或写入文件。 该文件必须可供服务器访问,并且必须从服务器的angular度指定该名称。
数据库用户的权限不是问题的原因。 然而(引用相同的页面):
COPY
命名文件或命令只允许数据库超级用户使用,因为它允许读取或写入服务器有权访问的任何文件。
关于权限问题,如果您使用psql来发出COPY
命令,请尝试使用\copy
。
好的问题是,我需要改变Excel file
的path
。 我把它插入到 所有用户都可以访问的公共账号中。
如果你遇到同样的问题,把你的excel file
移动到ex C:\\User\Public
文件夹(这个文件夹是一个没有任何限制的公用文件夹),否则你必须处理Windows permission issues
。