2016-05-11 1 views
0

У меня есть следующая таблица в PostgreSQL:Объемные данные импорта в поле массива с помощью Npgsql

+------------+----------+     
| Column | Type | 
+------------+----------+ 
| name  | text  | 
| keywords | text[] | 
+------------+----------+ 

Я хотел бы вставить целую кучу строк в нем, но я не могу понять, как вставить данных в поле массива. Использование BeginTextImport не работает, так как TextWriter не принимает массивы:

using (var writer = connection.BeginTextImport(
    "COPY table (name, keywords) FROM STDIN DELIMITER ';'" 
)) 
{  
    foreach (var item in items) 
    { 
     writer.Write(item.Name + ";"); 
     // How to do this? 
     writer.Write(item.Keywords.ToArray(), NpgsqlDbType.Array | NpgsqlDbType.Text); 
    } 
} 

Использование BeginBinaryImport выдает ошибку: «не может закрыть писатель, ряд все еще продолжается, сначала закончить NpgSql».

using (var writer = connection.BeginBinaryImport(
    "COPY table (name, keywords) FROM STDIN (FORMAT BINARY)" 
)) 
{  
    foreach (var item in items) 
    { 
     writer.StartRow(); 
     writer.Write(item.Name, NpgsqlDbType.Text); 
     writer.Write(item.Keywords.ToArray(), NpgsqlDbType.Array | NpgsqlDbType.Text); 
    } 
}// Exception thrown here 

Как мы можем массово скопировать данные в поле массива?

+0

Импорт текста не подходит для этого случая - это означает, что вы несете ответственность за форматирование всего текста в текстовом формате PostgreSQL (разделители и все). –

+0

Я просто попробовал ваш пример двоичного кода, и он работает просто отлично - какую версию Npgsql вы используете точно? Какой именно список ваших товаров? Можете ли вы представить полный исходный код, который воспроизводит проблему? –

ответ

2

Как насчет this? Он ссылается на this library, который вы могли бы использовать (не использовали его самостоятельно, поэтому я не могу прокомментировать его).

Если вы не хотите брать дополнительную зависимость, вы можете по крайней мере посмотреть, что она делает под капотом.

+0

Спасибо! Дополнительная зависимость действительно проблема, но на основе того, как эта библиотека реализована, я заметил, что лучше использовать BinairyImport. Он по-прежнему не работает (см. Мое обновление), но я уверен, что это шаг к решению. – Xatoo

Смежные вопросы