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