Вставка дубликата записи с помощью Npgsql

Я пытаюсь вставить данные в следующую таблицу, используя поставщика Npgsql ADO.NET:

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


person phil_rawlings    schedule 16.11.2013    source источник
comment
Ура. Я рад, что у тебя та же проблема, что и у меня. Я тоже использовал 2.0.12, но на PG 9.4. Я попробую новую версию npgsql.   -  person Peter pete    schedule 20.11.2015


Ответы (1)


У нас такая же проблема. Согласно этой теме:

http://pgfoundry.org/forum/forum.php?set=custom&forum_id=518&style=nested&max_rows=50&submit=Change+View

Мы только что заметили, что у Npgsql есть проблема с обработкой сообщений об ошибках из postgresql 9.3.x.

Глен Паркер уже исправлен в нашем последнем коде: https://github.com/npgsql/Npgsql/pull /99. Мы работаем над созданием новой стабильной версии 2.0.12 с этим исправлением.

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

Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы с этим.

Так что, если вы используете PostgreSQL 9.3, это может быть вашей проблемой. Вам придется загрузить исправление и поэкспериментировать, чтобы увидеть, действительно ли это ваша проблема в данном случае.

person bshender    schedule 26.11.2013
comment
Новая версия связанного NpgsqlError.cs решает проблему - спасибо! - person phil_rawlings; 08.12.2013