質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

1250閲覧

postgresqlの配列での挿入

you_sss

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/07/05 16:15

前提・実現したいこと

現在Oracleからposgresqlへの移行をやっています
oracleではできた文字項目のカラムに配列を渡し一括挿入ができないものかと考えていましたが
うまくいきません
ご助言お願いいたします

発生している問題・エラーメッセージ

Can't write System.Object[] with handler type Texthandler

該当のソースコード

C#

object[] ar[] = new object[dt.Rows.Count]; for (int i = 0; i<iCnt ;i++) { ar[i]=dt.rows[i][0]; } string sql = "Inset Into RecordInfo (" + " RecName )" + " values (" + " :RecTitile" + " )"; EDBparameter param; param = edbCommand.Parameters[:RecTitile]; param.Value = ar;

試したこと

Value句をレコード数分ループさせる方法ではできました
が実データはカラム数も数十カラム、レコード数も数万件あり
Oracleで行っていたような配列格納とはスピードが雲泥の差

補足情報(FW/ツールのバージョンなど)

EDB postgresql Advanced Server 11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Oracleで行っていたような配列格納とはスピードが雲泥の差

1行ずつinsertするならそれは遅くもなります。
values以降をループしてSQLを組み立てて、SQLの発行回数を抑えるようにして下さい。

INSERT

複数行のVALUES構文を使用して複数行を挿入します。

INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

数万件程度なら必要は無いと思いますが、10万件を超えるような場合は、分割コミットした方が高速です。

移行元のデータがCSVならCOPY FROMするのが最も高速。

投稿2020/07/05 16:28

編集2020/07/06 01:23
sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問