我只是尝试使用这种方式进行批量数据加载,我发现问题。我刚刚在我的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
我做错了什么?
如果这是一个已经回答过的问题,我很抱歉,但是在这个网站内搜索,每个问题都已经用我的方式理论上解决了,但不幸的是,对我来说,它没有用。
答案 0 :(得分:0)
Joop提供的解决方案是正确的。抱歉延迟
您不仅需要对文件的读访问权限,而且还需要至少x访问指向其中的路径中的目录。主目录通常没有设置x位(出于好的理由),最简单的方法是将文件复制或移动到/ tmp /并从那里读取。