Problems while importing a txt file into postgres using php
Actually, 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 excute:
\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"
.
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.