2009-05-19 41 views
0

我在C中使用libpq库来访问我的Postgresql数据库。应用程序将插入从队列中提供的一段数据。当有大量数据并且它非常快速地插入时,它会随机插入并将空行插入表中。在我执行插入之前,我会检查以确保插入的文本的长度大于1。这是随机发生的原因吗?当数据较少时它不会发生。postgresql libpq无故插入空行

*我想指出,这不会发生在MySQL中,只有PostgreSQL的

+2

将检查约束添加到适当的表中并等待数据库中的(不可避免的)错误。 – 2009-05-19 21:44:05

+0

这是多线程吗?你使用异步pg调用吗?你在重复使用你的输入缓冲区吗? – 2009-05-20 02:17:35

回答

1

见米伦A.拉德夫的评论。它应该是一个答案。你不应该允许空行。

当然,至少有一列可以有一个约束,会导致插入失败。然后,您的应用程序可以通过足够的诊断功能打印/记录错误,以便了解发生了什么情况以及在什么条件下。

如果不对上述内容进行改造,请确定您的队列中的所有数据是否已正确插入,或者是否有某些行丢失。也就是说,看看有些行是否被翻译成空插入。如果您发现某些数据导致此问题,您可以查找问题数据的共同点。

您是使用准备好的参数化插入,还是每次构建SQL插入语句字符串并执行?如果你正在构建SQL字符串来执行,那么你必须必须确保你正在用libpq提供的例程正确地引用字符/二进制字符串列。或者切换到另一种准备插入的方法,并将数据作为参数传递给libpq本身可以正确引用的地方。这也可能会提高性能。