2013-03-29 29 views
5

PostgreSQL'te COPY komutunu çevreleyen bir soru vardı. Bazı sütun değerlerini sadece PostgreSQL tablomda kopyalamak istediğim bir CSV dosyasına sahibim.KOPYA komutu: yalnızca belirli sütunları kopyala csv

Bunu yapmak mümkün mü? Sütun adlarını eşleştirmek için üstbilgiyi kullanarak bir CSV'deki tüm verileri bir tabloya kopyalamak için COPY komutunu kullanmayı bildiğim, ancak yalnızca bazı sütunları istediğimde bu nasıl mümkün olabilir?

cevap

7

Ya ön işlem ikinci bir adımda bir hedef tablonun geçici kopyalama ve INSERT yalnızca seçilen sütunlar halinde CSV dosyası, ya da (muhtemelen ne yapacağını) ithalat:

CREATE TEMP TABLE tmp AS SELECT * FROM target_table LIMIT 0; 
ALTER TABLE tmp ADD COLUMN etra_column1 text 
      , ADD COLUMN etra_column2 text; -- add excess columns 
COPY tmp FROM '/path/tp/file.csv'; 

INSERT INTO target_table (col1, col2, col3) 
SELECT col1, col2, col3 FROM tmp -- only reelvant columns 
WHERE ... -- optional, to also filter rows 

geçici tablodur oturumun sonunda otomatik olarak düştü. İşleme daha uzun sürerse, normal bir tablo kullanın.

+0

Pekala, bu harika bir bilgi. CSV dosyasını önceden işlemeyi düşünüyordum, ama geçici tablo çok daha kolay olacak gibi görünüyor. Teşekkür ederim! – parchambeau

+0

Tablo * büyük * - gigabyte boyutu ise herhangi bir ipucu? – Chloe

+0

@Chloe: Bu, ayrıntılara ve gereksinimlerinize bağlı. Postgres sürümünüz, tablonuzun boyutu ve CSV dosyası, satırın genişliği, kaç fazla sütun, kullanılabilir kaynaklar, süper kullanıcı ayrıcalıkları, eşzamanlı erişim, CSV'deki veriler tutarlı mı? Vb, özellikleriyle yeni bir soru başlatmanı öneririm. Düzenleme için teşekkürler, BTW, gerçekten sütun yerine satırları seçmeye odaklanmıştım. –

İlgili konular