PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

aspas simples aparecem ao redor do valor após executar a cópia no postgres 9.2


O que você descreve em sua pergunta obviamente não é o que realmente está acontecendo. COPY falharia ao tentar importar literais de string com aspas simples redundantes em um date coluna.

Para se livrar de aspas redundantes, importe para uma tabela temporária com text coluna e, em seguida, INSERT INTO a tabela de destino cortando as aspas:
CREATE TEMP TABLE wtmp (
   city text
 , temp_lo int
 , temp_hi int
 , prcp real
 , date text  -- note how I use text here.
);

COPY wtmp FROM '~aviad/postsgres/playground/weather.txt';

INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
SELECT city, temp_lo, temp_hi, prcp, trim(date, '''')::date
FROM   wtmp
-- ORDER BY ?
;

A tabela temporária é descartada automaticamente no final da sua sessão.

Palavras reservadas como identificadores


Vejo que você copiou o exemplo do manual. Aqui está o link direto para o manual atual .

Embora esteja correto, esse exemplo no manual é lamentável. Aconselho a não usar palavras reservadas como date como nomes de coluna. Como você pode ver aqui date é uma palavra reservada em todos os padrões SQL. É permitido usar no Postgres e posso ver como é tentador por um exemplo simples. Mas isso não a torna uma boa ideia. Geralmente, você deve ter o hábito de evitar palavras reservadas como identificadores. Isso leva a mensagens de erro confusas e código SQL desnecessariamente incompatível.