我正在尝试在postgres数据库中做一个非常简单的插入语句。它不起作用,但它也没有出错,所以我不知道如何排除故障。 这是声明:
INSERT INTO my_table (col1, col2) select col1,col2 FROM my_table_temp;
临时表中大约有 2 亿个条目,my_table中有 5000 万个条目。临时表没有索引或约束,但 my_table 中的两列都有 btree 索引,col1 具有外键约束。
我运行了大约 20 天的第一个查询。上次我尝试了大约 50m 的类似插入,花了 3 天,所以我预计需要一段时间,但不是一个月。此外,my_table并没有变长。相隔 1 天查询,以下得出完全相同的数字。
从my_table中选择计数(*);
所以它根本没有插入。但它也没有出错。从系统资源使用情况来看,它似乎根本没有做太多事情,这个过程没有消耗资源。
查看其他正在运行的查询,我有权查看的任何其他查询都不会触及这两个表,并且我是唯一使用它们的人。
我不确定如何进行故障排除,因为没有错误。它只是什么都不做。任何关于可能出错的事情或要检查的事情的想法都会非常有帮助。
为了将来偶然发现这个问题的人:
经过长时间的讨论(请参阅上面评论中的链接讨论),该问题与 psycopg2 在内存中缓冲查询有关。
另一个有用的注意事项:插入到带有索引的表中很慢,因此在批量加载之前删除它们,然后在之后再次添加它们会有所帮助。
就我而言,它是我正在更新的同一张表上的TRIGGER
,它失败了,没有错误。
停用触发器,更新完美运行。
就我而言,这是日期格式问题。 我在插入数据库之前评论了日期属性,它起作用了。
尝试在查询末尾使用分号来获取调试信息。 在我的情况下,它失败了,因为它无法找到插入语句的结尾。