2013-11-16 3 views
2

Я пытаюсь вставить данные в следующую таблицу с помощью 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 или это что-то делать с правами Schema (несмотря на то, для этого теста я использую суперпользователя postgres.

Я использую Npgsql 2.0.12.0

+0

Yay. Я рад, что у тебя такая же проблема, как у меня. Я тоже использовал 2.0.12, но на PG 9.4. Я дам новую версию npgsql. –

ответ

2

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

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

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

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

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

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

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

+1

Новая версия связанного NpgsqlError.cs решает проблему - спасибо! –