2012-03-19 41 views
9

hstore dokümantasyonu, tek seferde hstore satırına "insert" yazmayı anlatır. Zaten megabayt veya Gigs bir postgres hstore içine olabilir birkaç 100k satır toplu yükleme yapmak için var mı.Postgres Hstore'a büyük miktarda veri yükleniyor

kopya komutları csv dosyaları sütun

birisi bir örnek gönderir misiniz yüklemek için sadece iş gibi görünüyor? Tercihen piton/psycopg

cevap

3

insert ile çalışır ve kopya bir çözüm bana

create table b(h hstore); 
insert into b(h) VALUES ('a=>1,b=>2'::hstore), ('c=>2,d=>3'::hstore); 
select * from b; 
     h   
-------------------- 
"a"=>"1", "b"=>"2" 
"c"=>"2", "d"=>"3" 
(2 rows) 

$ cat > /tmp/t.tsv 
a=>1,b=>2 
c=>2,d=>3 
^d 

copy b(h) from '/tmp/t.tsv'; 
select * from b; 
     h   
-------------------- 
"a"=>"1", "b"=>"2" 
"c"=>"2", "d"=>"3" 
"a"=>"1", "b"=>"2" 
"c"=>"2", "d"=>"3" 
(4 rows) 
5

yukarıdaki cevapları için doğal yollarla çalışması için görünür bir sütuna dahil olmak üzere birden sütunlarda kopyalamaya çalışırsanız o eksik görünüyor benzer şekilde

$ cat test 
1,a=>1,b=>2,a 
2,c=>3,d=>4,b 
3,e=>5,f=>6,c 

create table b(a int4, h hstore, c varchar(10)); 
CREATE TABLE; 
copy b(a,h,c) from 'test' CSV; 
ERROR: extra data after last expected column 
CONTEXT: COPY b, line 1: "1,a=>1,b=>2,a" 

:

copy b(a,h,c) from 'test' DELIMITER ','; 
ERROR: extra data after last expected column 
CONTEXT: COPY b, line 1: "1,a=>1,b=>2,a" 
virgül sınırlayıcı bir hstore türüyle ve kullanımı, KOPYA gibi karışır

Bu CSV olarak ithal ve alanını alıntı yaparak, olsa da, sabitlenebilir hstore alınmak üzere: Sadece bu kadar gerekli olan bir CSV olarak ithal CSV biçiminde izin aktaran

$ cat test 
1,"a=>1,b=>2",a 
2,"c=>3,d=>4",b 
3,"e=>5,f=>6",c 

copy b(a,h,c) from 'test' CSV; 
COPY 3 
select h from b; 
     h   
-------------------- 
"a"=>"1", "b"=>"2" 
"c"=>"3", "d"=>"4" 
"e"=>"5", "f"=>"6" 
(3 rows) 

ama sen yapabilirsin COPY için DELIMITER ve QUOTE argümanlarını kullanarak alan sınırlayıcı ve alıntı karakterini "," ve "" olmayan değerlere açıkça ayarlayın.

0

Bunu, kopyalama ikili komutuyla kesinlikle yapabilirsiniz.

Bunu yapabilen bir python lib'unun farkında değilim, ancak sütun kodlamalarını anlamanıza yardımcı olabilecek bir yakut var.

https://github.com/pbrumm/pg_data_encoder

İlgili konular