【问题标题】:postgresql libpq inserting empty row for no reasonpostgresql libpq无缘无故插入空行
【发布时间】:2009-05-19 21:40:06
【问题描述】:

我正在使用 C 中的 libpq 库来访问我的 Postgresql 数据库。应用程序插入从队列馈送的一条数据。当有很多数据并且插入速度非常快时,它会随机插入并空行到表中。在我什至执行插入之前,我检查以确保插入的文本的长度大于一。这是随机发生的原因吗?当数据较少时,它不会发生。

*我想指出,这不会发生在 Mysql 上,只有 Postgresql

【问题讨论】:

  • 在适当的地方将检查约束添加到您的表中,并等待来自数据库的(不可避免的)错误。
  • 这是多线程的吗?你使用异步 pg 调用吗?你在重复使用你的输入缓冲区吗?

标签: c++ c database postgresql


【解决方案1】:

参见 Milen A. Radev 的评论。这应该是一个答案。您不应该允许空行。

当然,至少有一列可能有会导致插入失败的约束。然后,您的应用可以打印/记录错误并提供足够的诊断信息,以便您了解发生了什么以及在什么条件下发生。

如果不修改上述内容,请确定队列中的所有数据是否都已正确插入,或者是否缺少某些行。即,查看是否某些行被转换为空插入。如果您发现某些数据导致了这种情况,您可以找到问题数据的共同点。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2013-08-09
相关资源
最近更新 更多