У меня есть следующая таблица в 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
Как мы можем массово скопировать данные в поле массива?
Импорт текста не подходит для этого случая - это означает, что вы несете ответственность за форматирование всего текста в текстовом формате PostgreSQL (разделители и все). –
Я просто попробовал ваш пример двоичного кода, и он работает просто отлично - какую версию Npgsql вы используете точно? Какой именно список ваших товаров? Можете ли вы представить полный исходный код, который воспроизводит проблему? –