加载到postgres的csv批量数据在osx Mavericks上使用COPY或\ copy无效

时间:2014-09-15 10:13:22

标签: postgresql csv psql

我只是尝试使用这种方式进行批量数据加载,我发现问题。我刚刚在我的osx系统tom / mypass中创建了一个用户,然后我刚刚创建了用户和数据库,然后是表格:

MacBook-Pro-Retina-de-Alonso:~ aironman$ psql template1
psql (9.3.5)
Type "help" for help.

template1=# CREATE USER tom WITH PASSWORD 'mypass';
CREATE ROLE
template1=# CREATE DATABASE "TrialDB";
CREATE DATABASE
template1=# GRANT ALL PRIVILEGES ON DATABASE "TrialDB" to tom;
GRANT

TrialDB=> CREATE TABLE core2door_element
TrialDB-> (
TrialDB(>   id serial NOT NULL,
TrialDB(>   key character varying(255) NOT NULL,
TrialDB(>   type character varying(255) NOT NULL,
TrialDB(>   label character varying(255) NOT NULL,
TrialDB(>   longitude double precision NOT NULL,
TrialDB(>   latitude double precision NOT NULL,
TrialDB(>   parent_id integer,
TrialDB(>   CONSTRAINT core2door_element_pkey PRIMARY KEY (id),
TrialDB(>   CONSTRAINT core2door_element_parent_id_fkey FOREIGN KEY (parent_id)
TrialDB(>       REFERENCES core2door_element (id) MATCH SIMPLE
TrialDB(>       ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED
TrialDB(> )
TrialDB-> WITH (
TrialDB(>   OIDS=FALSE
TrialDB(> );
CREATE TABLE
TrialDB=> ALTER TABLE core2door_element OWNER TO tom;
ALTER TABLE

现在,如果我尝试启动COPY命令:

TrialDB=> COPY core2door(id,key,type,label,longitude,latitude,parent_id) FROM '/Users/aironman/Documents/tektroniks/fake_data_entity.csv' WITH DELIMITER ',' CSV HEADER;
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无效,尝试使用\ copy:

TrialDB=> \copy core2door(id,key,type,label,longitude,latitude,parent_id) FROM '/Users/aironman/Documents/tektroniks/fake_data_entity.csv' WITH DELIMITER ',' CSV HEADER;
/Users/aironman/Documents/tektroniks/fake_data_entity.csv: Permission denied

许可也被拒绝了!

如您所见,csv文件拥有所有权限:

MacBook-Pro-Retina-de-Alonso:tektroniks aironman$ ls -l fake_data_entity.csv 
-rwxrwxrwx+ 1 aironman staff 351 sep 15 09:53 fake_data_entity.csv

我做错了什么?

如果这是一个已经回答过的问题,我很抱歉,但是在这个网站内搜索,每个问题都已经用我的方式理论上解决了,但不幸的是,对我来说,它没有用。

1 个答案:

答案 0 :(得分:0)

Joop提供的解决方案是正确的。抱歉延迟

您不仅需要对文件的读访问权限,而且还需要至少x访问指向其中的路径中的目录。主目录通常没有设置x位(出于好的理由),最简单的方法是将文件复制或移动到/ tmp /并从那里读取。