我对SQL很新,我有一个需要清理的大型数据库。在大多数表中,有一个名为“ID号”的列,我想查看所有这些表,检查每个ID号以查看它是否在我有错ID的列表中,如果是删除包含ID的整个表行。问题是,单独的错误ID列表超过300万,表条目总数达到数亿。我真的不知道从哪里开始,并想知道是否有人可以帮助我?
答案 0 :(得分:2)
您可以使用PL / PgSQL执行此操作,使用针对系统目录的查询来构建DELETE
查询,然后使用format(...)
运行EXECUTE
。
Stack Overflow上有很多现有的动态SQL示例,以及如何查询目录以构建表列表。使用pg_catalog.pg_class
和pg_catalog.pg_attribute
或使用information_schema
获取架构信息。
请记住将format
与%I
格式说明符一起用于标识符,不要只是将SQL文本与||
连接起来。
请参阅:
EXECUTE
format
function information_schema
在尝试使用动态DML之前,请记住:确保您有良好的备份!错误很容易破坏数据库中的所有数据。当然,你应该有很好的备份 - 最好用PgBarman PTPR WAL存档加上夜间转储 - 无论如何......