我遇到的情况是INSERT可能会失败而几乎没有后果,但是有时它也会阻塞一段时间(等待锁),这对于调用者来说是个问题。
一种选择是添加一条语句或锁定超时,但这意味着客户端将等待最多该值,并且一旦达到超时,插入操作就会丢失。
一种可能的选择是异步执行查询(通过PQsendQuery
),但是一旦查询被确认,就忽略结果并关闭连接。这样做是否正确地保证了查询最终将被执行(成功或失败),还是关闭连接意味着postgres可能在完成之前放弃了查询?
注意:从技术上讲,我是通过psycopg2异步连接来完成此操作的,因此期望cursor.execute()
然后等待connection.poll()
返回除POLL_WRITE
以外的其他状态。假设以上方法可行,是否会增加担忧?