2012-03-19 18 views
9

hstoreのドキュメントでは、hstoreに一度に "insert"を使用する方法についてのみ説明しています。 何百万行もの一括アップロードを行うにはどうすればいいですか? メガバイトまたはギグでpostgres hstoreになる可能性があります。大量のデータをPostgres Hstoreにロード

コピーコマンドは、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

上記の回答のために自然な方法で動作しているように見えますが、列を含む複数の列にコピーしようという点で不完全なようです同様

$ 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のタイプにして使用する、COPYは次のように、混乱します

これは、CSVとしてインポートし、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) 

は引用ので、CSVが必要とされるようにインポートし、CSV形式で許可されていますが、できているだけCOPYのDELIMITERおよびQUOTE引数を使用して、フィールドの区切り文字および引用符を明示的に非 '、' ''の値に設定します。

0

copy binaryコマンドで間違いなく実行できます。

私はこれを行うことができるPythonのlibを認識していませんが、私はあなたが列のエンコーディングを理解するのを助けることができるルビーを持っています。

https://github.com/pbrumm/pg_data_encoder

関連する問題