PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

SALIN hanya beberapa kolom dari masukan CSV?

Saya tidak tahu dari mana Anda mendapatkan sintaks itu, tetapi COPY tidak mengambil daftar alias kolom seperti itu. Lihat bantuan:

COPY table_name [ ( column_name [, ...] ) ]
    FROM { 'filename' | PROGRAM 'command' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]

(AS bukan salah satu opsi yang tercantum; untuk melihat output penuh jalankan \d copy di psql, atau lihat manual untuk copy perintah online).

Tidak ada fasilitas pemetaan di COPY yang memungkinkan Anda hanya membaca beberapa kolom dari input CSV. Ini akan sangat berguna, tetapi belum ada yang punya waktu/bunga/dana untuk mengimplementasikannya. Ini benar-benar hanya satu dari banyak tugas transformasi/pemfilteran data yang diinginkan orang.

PostgreSQL mengharapkan daftar kolom yang diberikan dalam COPY berada dalam urutan yang sama, kiri-ke-kanan, seperti yang ada di file CSV, dan memiliki jumlah entri yang sama dengan file CSV yang memiliki kolom. Jadi jika Anda menulis:

COPY con (date,kgs)

maka PostgreSQL akan mengharapkan input CSV dengan tepatnya dua kolom . Ini akan menggunakan kolom csv pertama untuk "date" kolom tabel dan kolom csv kedua untuk "kgs" kolom tabel. Tidak peduli apa itu header CSV, mereka akan diabaikan jika Anda menentukan WITH (FORMAT CSV, HEADER ON) , atau diperlakukan sebagai baris data normal jika Anda tidak menentukan HEADER .

PostgreSQL 9.4 menambahkan FROM PROGRAM ke COPY , sehingga Anda dapat menjalankan perintah shell untuk membaca file dan memfilternya. Skrip Python atau Perl sederhana akan melakukan pekerjaan itu.

Jika file kecil, cukup buka salinan di spreadsheet pilihan Anda sebagai file csv, hapus kolom yang tidak diinginkan, dan simpan, jadi hanya date dan kgs kolom tetap ada.

Sebagai alternatif, COPY ke tabel staging yang memiliki semua kolom yang sama dengan CSV , lalu lakukan INSERT INTO ... SELECT untuk mentransfer hanya data yang diinginkan ke tabel target sebenarnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melewati Hasil Kueri Basis Data ke Bagan Sparkline jQuery Menggunakan PHP

  2. Buat fungsi SQL yang mengacu pada tabel atau kolom yang belum ada (belum)

  3. PostgresSQL / pgAdmin4 / dump versi server tidak cocok

  4. Postgres pg_dump membuang basis data dalam urutan yang berbeda setiap saat

  5. pilih bersarang menggunakan hitungan untuk menghitung setiap baris di Postgres