2009-05-19 2 views
0

Я использую библиотеку libpq в C для доступа к моей базе данных Postgresql. Приложение вставляет часть данных, подаваемых из очереди. Когда есть много данных, и он очень быстро вставляет, он случайным образом вставляет и пустую строку в таблицу. Прежде чем я даже выполню вставку, я проверяю, чтобы длина вставляемого текста была больше, чем одна. Есть ли причина, почему это происходит случайно? Это случается, когда данных меньше.postgresql libpq, вставляющий пустую строку без причины

* Я хотел бы отметить, что это не происходит на Mysql, только комментарий PostGreSQL

+2

Добавьте ограничение проверки в таблицу, где это необходимо, и дождитесь (неизбежной) ошибки из БД. –

+0

Является ли это многопоточным? Используете ли вы асинхронные вызовы pg? Вы повторно используете входные буферы? –

ответ

1

знакомства Милен А. Radev в. Это должен был быть ответ. Вы не должны допускать пустые строки.

Несомненно, хотя бы один столбец может иметь ограничение, которое может привести к сбою вставки. Затем ваше приложение может распечатать/зарегистрировать ошибку с достаточной диагностикой для вас, чтобы выяснить, что происходит, и при каких условиях.

Не дооснащая приведенное выше, определите, были ли все данные из вашей очереди вставлены правильно или отсутствуют некоторые строки. I.e., см., Если некоторые строки переводятся в пустые вставки. Если вы видите, что некоторые данные вызывают это, вы можете найти то, что у данных проблемы есть.

Вы используете подготовленные, параметризованные вставки или вы строите строку инструкции вставки SQL каждый раз и выполняете это? Если вы создаете строки SQL для выполнения, вы должны должны убедиться, что вы правильно цитируете столбцы символов/двоичных строк с помощью процедур, предоставляемых libpq. Или переключитесь на другой способ подготовки вставки и передачи данных в качестве параметров, где он может быть правильно процитирован самим libpq. Это также может повысить производительность.

+0

Я строю SQL-строки каждый раз и выполняю, я также использую функцию escape-строки, предоставляемую libpq. Знаете ли вы, можно ли программно добавить ограничение через libpq? – whatWhat

+0

Возможно, но вы можете надеть шляпу DBA и сделать это за пределами своего кода. В любом случае, см. Http://www.postgresql.org/docs/current/static/sql-altertable.html для синтаксиса ALTER TABLE, который часто ссылается на http://www.postgresql.org/docs/current/static/ SQL-createtable.html. Найдите «ограничение» на обеих страницах. – dwc

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