O arquivo CSV de importação do PostgreSQL causa erro de sintaxe


8

Estou tentando importar um arquivo CSV para um banco de dados através do comando "COPY"; no entanto, recebo o erro (o que parece comum) de que preciso ser um superusuário e que devo usar "\ copy". No entanto, ao usar \ copy, recebo um erro de sintaxe:

ERROR:  syntax error at or near "\"
LINE 1: \copy

Com o sinal de intercalação apontando para "\". Aqui está a minha consulta:

\copy tablename(column2, column3, column4, column5) from '/home/uploads/data.csv' WITH DELIMITER ',' CSV HEADER'

Eu tentei "copiar" e "\ copiar". O primeiro me deu um erro de superusuário e o último me deu esse erro de sintaxe. Alguma idéia de como consertar isso? faça funcionar?

Estou executando o comando através do campo de entrada sql do myPgAdmin.

A única outra pergunta que tenho é relativa à importação de colunas via tablename (coluna2, coluna3 e assim por diante. Essa é a sintaxe correta para isso?

Respostas:


8

\copyé um comando psql (linha de comando). É não um comando normal do SQL.

Você precisará usar COPY (mas isso exige que o arquivo esteja presente no servidor de banco de dados)


Como você importaria arquivos CSV diretamente através do SQL, em vez de usar uma linha de comando?
Antjanus 23/08/2012

11
@antjanus: você usaria o comando COPY como já mencionei (e adam explicado em detalhe)
a_horse_with_no_name

novamente, isso requer permissões de superusuário e não é seguro, certo?
Antjanus 24/08/12

4

Por favor, consulte o manual do postgres para COPY .

No pgAdmin (ou na string sql que você passa por um script ou outra conexão db), você usaria COPY sem o prefixo "\".

então digite algo como: COPY tablename....

Você precisa se certificar de ter os privilégios relevantes para executar o comando, portanto, nesse caso, você deve poder efetuar login no banco de dados e ter acesso de gravação ao 'tablename'. O Postgres também precisa ser capaz de acessar o arquivo, portanto o caminho / home / uploads / deve estar acessível no servidor de banco de dados e o usuário do postgres deve poder ler o arquivo - verifique as permissões para o arquivo e o diretório.


2

No meu sistema 9.1, o erro que recebo é bastante informativo:

or_examples=> copy comp_table_test from '/tmp/test';
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.

Se você ler a dica novamente com atenção, ela poderá copiar do stdin. Isto é o que \ copy no psql realmente faz no back-end. Consulte os documentos em http://www.postgresql.org/docs/8.3/static/sql-copy.html para obter mais informações.

Você pode colocar o corpo da cópia em sua consulta ou, pelo menos, é assim que funciona no psql.


1
copy coordina from '/tmp/filename.txt' WITH NULL AS ;

É assim que faço no pgAdmin3. Mas verifique os direitos do usuário com cuidado, às vezes os direitos são o problema. (usuário postgres em filename.txt / chmod 777)


você precisa ser um superusuário de banco de dados para fazer isso, embora, portanto, a reclamação original.
31712 Chris Travers

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.