[PATCH] COPY vs \copy HINT

From: Craig Ringer <craig(at)2ndquadrant(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: [PATCH] COPY vs \copy HINT
Date: 2016-08-12 07:49:16
Message-ID: CAMsr+YEqtD97qPEzQDqrCt5QiqPbWP_X4hmvy2pQzWC0GWiyPA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi all

I see this sort of question quite a bit:

http://stackoverflow.com/q/38903811/398670

where the user wonders why

COPY gemeenten
FROM 'D:\CBS_woningcijfers_2014.csv'
DELIMITER ';' CSV

fails with

ERROR: could not open file "D:\CBS_woningcijfers_2014.csv" for reading: No
such file or directory'

and as usual, it's because the path is on their local host not the Pg
server.

I think we should emit a HINT here, something like:

ERROR: could not open file "D:\CBS_woningcijfers_2014.csv" for reading: No
such file or directory'
HINT: Paths for COPY are on the PostgreSQL server, not the client. You may
want psql's \copy or a driver COPY ... FROM STDIN wrapper

as a usability improvement. Trivial patch attached.

I'm not sure how to avoid the need to translate the string multiple times,
or if the tooling will automatically flatten them. I haven't bothered with
the stat() failure or isdir cases, since they seem less likely to be the
cause of users being confused between client and server.

Sample output:

postgres=# COPY x FROM '/tmp/somepath';
ERROR: could not open file "/tmp/somepath" for reading: No such file or
directory
HINT: Paths for COPY are on the PostgreSQL server, not the client. You may
want psql's \copy or a driver COPY ... FROM STDIN wrapper

postgres=# COPY x TO '/root/nopermissions';
ERROR: could not open file "/root/nopermissions" for writing: Permission
denied
HINT: Paths for COPY are on the PostgreSQL server, not the client. You may
want psql's \copy or a driver COPY ... FROM STDIN wrapper

postgres=# COPY x TO 'relpath';
ERROR: relative path not allowed for COPY to file
HINT: Paths for COPY are on the PostgreSQL server, not the client. You may
want psql's \copy or a driver COPY ... FROM STDIN wrapper

--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachment Content-Type Size
0001-Emit-a-HINT-when-COPY-can-t-find-a-file.patch text/x-patch 2.1 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Masahiko Sawada 2016-08-12 08:26:24 Re: new autovacuum criterion for visible pages
Previous Message Jim Nasby 2016-08-12 03:30:36 Re: Add hint for function named "is"