对插入语句进行故障排除,失败且没有错误



我正在尝试在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,它失败了,没有错误。

停用触发器,更新完美运行。

就我而言,这是日期格式问题。 我在插入数据库之前评论了日期属性,它起作用了。

尝试在查询末尾使用分号来获取调试信息。 在我的情况下,它失败了,因为它无法找到插入语句的结尾。

相关内容

最新更新