2012-03-19 17 views
9

में बड़ी मात्रा में डेटा लोड हो रहा है hstore दस्तावेज़ केवल एक समय में एक पंक्ति में "डालने" के उपयोग के बारे में बात करता है। क्या कई 100k पंक्तियों का थोक अपलोड करने के लिए वैसे भी है जो मेगाबाइट्स या गिग्स को पोस्टग्रेस्ट हैस्टोर में हो सकता है।पोस्टग्रेस हैस्टोर

प्रतिलिपि आदेशों csv फ़ाइलें कॉलम

कोई पोस्ट कर सके एक उदाहरण अपलोड करने के लिए ही काम करते हैं लगता है? अधिमानतः एक समाधान है कि अजगर/psycopg

उत्तर

3

दोनों डालने के साथ काम करता है और कॉपी मुझे

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

ऊपर जवाब के लिए प्राकृतिक तरीकों से काम करने के लिए प्रकट है कि में अपूर्ण लगता है कि यदि आप एक स्तंभ सहित कई स्तंभों में नकल करने की कोशिश एक hstore प्रकार के साथ और एक अल्पविराम सीमांकक का उपयोग करें, कॉपी भ्रमित हो जाता है की तरह है,:

$ 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" 

यह तय किया जा सकता है, हालांकि, एक सीएसवी के रूप में आयात और क्षेत्र को उद्धृत करके hstore में आयात किया जा करने के लिए:

$ 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) 

का हवाला देते हुए केवल सीएसवी प्रारूप में अनुमति दी है, तो एक सीएसवी के रूप में आयात करने की आवश्यकता है, लेकिन आप कर सकते हैं स्पष्ट रूप से फ़ील्ड डेलीमीटर और उद्धरण वर्ण को गैर-, '' '' 'मानों के लिए DELIMITER और QUOTE तर्कों का उपयोग करके सेट करें।

0

आप निश्चित रूप से कॉपी बाइनरी कमांड के साथ ऐसा कर सकते हैं।

मुझे एक पाइथन lib के बारे में पता नहीं है जो यह कर सकता है, लेकिन मेरे पास एक रूबी है जो कॉलम एन्कोडिंग को समझने में आपकी मदद कर सकती है।

https://github.com/pbrumm/pg_data_encoder