0

我对 SQL 很陌生,我有一个需要清理的大型数据库。在大多数表中,有一个名为“ID 号”的列,我想浏览所有这些表,检查每个 ID 号,看看它是否在我有错误 ID 的列表中,如果它被删除包含 ID 的整个表格行。问题是,仅坏 ID 的列表就超过 300 万个,表条目的总数达到数亿。我真的不知道从哪里开始,想知道是否有人可以帮助我?

4

1 回答 1

2

您可以使用 PL/PgSQL 执行此操作,使用针对系统目录的查询来构建DELETE查询format(...),然后使用EXECUTE.

Stack Overflow 上有很多这样的动态 SQL 示例,以及如何查询目录以构建表列表。使用pg_catalog.pg_classpg_catalog.pg_attribute或使用information_schemafor 架构信息。

请记住使用format格式%I说明符作为标识符,不要只是将 SQL 文本与||.

看:

请记住:在尝试动态 DML 之前,请确保您有良好的备份!一个错误很容易破坏数据库中的所有数据。当然,你应该有很好的备份——最好是用 PgBarman 归档的 PITR WAL 加上夜间转储——无论如何......

于 2013-07-19T00:59:20.777 回答