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.