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

问题描述 投票:0回答:4

我正在尝试在 postgres 数据库中做一个非常简单的插入语句。它不起作用,但也没有出错,所以我不知道如何排除故障。 这是声明:

INSERT INTO my_table (col1, col2) select col1,col2 FROM my_table_temp;

temp 表中有大约 200m 个条目,my_table 中有 50m 个条目。临时表没有索引或约束,但 my_table 中的两列都有 btree 索引,并且 col1 有外键约束。

我运行了大约 20 天的第一个查询。上次我尝试了大约 50m 的类似插入,花了 3 天,所以我预计它需要一段时间,但不是一个月。此外, my_table 不会变长。相隔 1 天查询,以下产生相同的确切数字。

从 my_table 中选择计数(*);

所以它根本没有插入。但它也没有出错。查看系统资源使用情况,它似乎根本没有做任何事情,该进程没有占用资源。

查看其他正在运行的查询,我有权查看的任何其他内容都没有触及任何一个表,而且我是唯一使用它们的人。

我不确定如何排除故障,因为没有错误。它只是什么也没做。任何关于可能出错的事情或需要检查的事情的想法都会非常有帮助。

postgresql insert sql-insert
4个回答
2
投票

为了将来遇到这个问题的任何人:

经过长时间的讨论(参见上面评论中的链接讨论),问题原来与 psycopg2 在内存中缓冲查询有关。

另一个有用的注意事项:插入带有索引的表很慢,因此它可以帮助在批量加载之前删除它们,然后再添加它们。


0
投票

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


0
投票

在我的例子中,它是我正在更新的同一张桌子上的一个

TRIGGER
,它没有错误地失败了。

停用触发器,更新工作完美无缺。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.