PostgresqlにNpgsqlを使用してデータを追加するには一般的にはNpgsqlCommandでINSERTを実行。
しかし大量のデータを追加するにはこれでは時間がかかりすぎる。
その為Postgresqlのコピー機能のラッパーであるNpgsqlCopyInの使い方を記載。
Postgresqlのコピー機能についてはこちら
追加対象のテーブル
CREATE TABLE tbl_test ( rec_no decimal(6,0) NOT NULL, rec_name varchar(60) NOT NULL, add_dt timestamp without time zone NOT NULL, CONSTRAINT pkey_tbl_test PRIMARY KEY ( rec_no ) ) WITH ( OIDS=FALSE );
追加用データCSVファイル
文字コードはUTF8
改行はCRLF
デリミタはタブ
1 NAME1 2013-09-26 00:00:00 2 NAME2 2013-09-26 00:00:00 3 NAME3 2013-09-26 00:00:00
以下はコード
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.IO; using Npgsql; namespace pcopy { class Program { static void Main(string[] args) { NpgsqlConnection conn = new NpgsqlConnection("Server=ホスト名;User id=ID;password=パスワード;Database=DB名;SyncNotification=true;"); conn.Open(); FileStream fs = File.OpenRead(@"CSVファイルのフルパス"); NpgsqlCommand command = new NpgsqlCommand("COPY tbl_test FROM STDIN", conn); NpgsqlCopyIn cin = new NpgsqlCopyIn(command, conn, fs); cin.Start(); cin.End(); } } }