Apa yang Anda gambarkan dalam pertanyaan Anda jelas bukan apa yang sebenarnya terjadi. COPY
akan gagal mencoba mengimpor literal string dengan tanda kutip tunggal yang berlebihan ke dalam date
kolom.
Untuk menghilangkan tanda kutip yang berlebihan, impor ke tabel sementara dengan text
kolom, lalu INSERT INTO
tabel target memangkas tanda kutip:
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 ?
;
Tabel temp dijatuhkan secara otomatis di akhir sesi Anda.
Kata-kata yang dicadangkan sebagai pengenal
Saya melihat Anda menyalin contoh dari manual. Berikut adalah tautan dalam ke manual saat ini .
Meskipun benar, contoh dalam manual itu sangat disayangkan. Saya menyarankan untuk tidak menggunakan kata-kata khusus seperti date
sebagai nama kolom. Seperti yang Anda lihat di sini
date
adalah kata yang dicadangkan di setiap standar SQL. Itu diizinkan untuk digunakan di Postgres dan saya dapat melihat betapa menggoda untuk contoh sederhana. Tapi itu bukan ide yang bagus. Secara umum, Anda harus memiliki kebiasaan menghindari kata-kata yang dicadangkan sebagai pengidentifikasi. Ini mengarah pada pesan kesalahan yang membingungkan dan kode SQL yang tidak kompatibel.