【问题标题】:a csv bulk data loading into postgres is not working using COPY or \copy on osx Mavericks在 osx Mavericks 上使用 COPY 或 \copy 无法将 csv 批量数据加载到 postgres
【发布时间】:2014-09-15 10:13:21
【问题描述】:

我只是尝试使用这种方式进行批量数据加载,但我发现了问题。我刚刚在我的 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

我做错了什么?

如果这是一个已经回答的问题,我深表歉意,但是在这个网站中搜索,每个问题都已经用我的方式在理论上得到了解决,但不幸的是,对我来说,它不起作用。

【问题讨论】:

  • 您不仅需要对文件的读取权限,还需要至少 x 访问指向它的路径中的目录。主目录通常没有设置x 位(有充分的理由)最简单的方法是将文件复制或移动到/tmp/ 并从那里读取。
  • 谢谢您,先生,我将文件移动到我的 /tmp 目录,它可以工作了!

标签: postgresql csv psql


【解决方案1】:

Joop 提供的解决方案是正确的。抱歉耽搁了

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多