3

I am trying to import a txt/csv file into my postgres database from php using "\copy" command. I cannot use COPY instead of \copy as I need it to execute as a psql client. My code is:

$query = '\\'.'copy data1 FROM "data1.txt" WITH CSV HEADER DELIMITER AS "," QUOTE AS "^"';

$result = pg_query($conn,$query);
if (!$result) {
  echo "cannot copy data\n";
} else {
  echo "SUCCESS!";
}

When I run this php file, I get this error:

PHP Warning:  pg_query(): Query failed: ERROR:  syntax error at or near "\"
LINE 1: \copy data1 FROM "data1.txt" WITH ...
    ^ in script.php on line 30
1
  • I don't know pgsql, so can't really help you with that, but I would just import it in to sqlite and then sql it over Commented Jan 15, 2012 at 10:50

2 Answers 2

10

You cannot run \copy via pg_query(). It is not an SQL command. It is a meta-command of the psql client.

There you can execute:

\copy data1 FROM 'data1.txt' WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'

Or run the shell-command:

psql mydb -c "\copy data1 FROM 'data1.txt'
                WITH CSV HEADER DELIMITER AS ',' QUOTE AS '^'"

Note the quotes. Values need to be single-quoted in PostgreSQL: 'value'.
Double-quotes are for identifiers - and are only actually needed for identifiers with upper case or illegal character or for reserved words: "My table".

Sign up to request clarification or add additional context in comments.

3 Comments

thanks Erwin, I tried copying as a superUser(using COPY) and it worked!
what is the difference between COPY and \COPY?
@Tim: COPY is the SQL command and runs on the server. \copy is the psql command that wraps COPY for use from the client (convenient for local files).
0

I encountered the same problem, but instead of using the the raw psql \copy command, decided to use the Ecto.Adapters.SQL.stream/2 function to read the contents of the file, and Repo.transaction/1 that executes the normal SQL COPY command getting the data from STDIN provided by the stream as described in this blog. I haven't tested the performance of this but i figured it would be a good addition to this answer.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.