Вставка дубликата записи с использованием Npgsql
Я пытаюсь вставить данные в следующую таблицу с помощью поставщика ADO.NET Npgsql:
CREATE SCHEMA core;
CREATE TABLE core.config(
name TEXT NOT NULL,
value TEXT NOT NULL,
CONSTRAINT pk_config PRIMARY KEY (name)
);
Первая вставка работает нормально, но если я попытаюсь вставить элемент с тем же именем снова, Npgsql просто зависнет. Я ожидаю, что будет сгенерировано исключение о том, что ограничение первичного ключа было нарушено, но вместо этого Npgsql просто зависает. Конечно, если я проверяю логи сервера, я вижу это:
duplicate key value violates unique constraint "pk_config"
но это сообщение, похоже, не возвращается к Npgsql. Я делаю что-то неправильно? Мой код здесь:
using (NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=temp;User Id=postgres;Password=test1"))
{
conn.Open();
string cmdText = "INSERT INTO core.config(name, value) values ('item', 'value')";
using (NpgsqlCommand cmd = new NpgsqlCommand(cmdText, conn))
{
cmd.ExecuteNonQuery(); // This works fine
cmd.ExecuteNonQuery(); // Insert again: this hangs, but would expect an exception
}
}
Это упрощенная версия более крупного приложения (отсюда и использование схемы). Затем я попытался создать таблицу публично (схема не указана). Интересно, что это создает исключение при втором вызове ExecuteNonQuery()
:
Backend sent unrecognized response type
Я немного растерялся относительно того, является ли это ошибкой в Npgsql или это связано с привилегиями схемы (хотя для этого теста я использую суперпользователя "postgres").
Я использую Npgsql 2.0.12.0
1 ответ
У нас та же проблема. По этой теме:
Мы только что заметили, что у Npgsql есть проблема при обработке сообщений об ошибках из postgresql 9.3.x.
Глен Паркер уже исправлен в нашем последнем коде: https://github.com/npgsql/Npgsql/pull/99. Мы работаем над созданием новой стабильной версии 2.0.12 с этим исправлением.
Если вы хотите попробовать, вы можете получить последний git-код и проверить, работает ли он нормально для вас. Это в бета-состоянии, хотя.
Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы с этим.
Так что если вы используете PostgreSQL 9.3, это может быть вашей проблемой. Вам нужно скачать исправление и поэкспериментировать, чтобы выяснить, действительно ли это ваша проблема в данном случае.