如何在 PostgresQL 中显示所有无效对象

How to show all invalid objects in PostgresQL

寻找视图我可以列出 PostgreSQL 中的所有 'invalid' 对象。 在 Oracle 中,我们可以使用 dab_objects.status 列,但我不确定在 PostgreSQL 中是否有一种简单的方法可以做到这一点。

也许,我可以用下面的代码检查无效索引。 我如何为其他对象执行此操作?

SELECT pg_class.relname 
FROM pg_class, pg_index 
WHERE pg_index.indisvalid = false 
AND pg_index.indexrelid = pg_class.oid;

我认为您不必检查任何其他内容,因为其他对象在 PostgreSQL 中不会变得无效。

Oracle 和 PostgreSQL 在这方面的工作方式截然不同:

  • 在 Oracle 中,您始终可以 ALTER 一个对象(例如 table),即使存在依赖对象(例如视图)也是如此。然后依赖对象变得无效并且必须重新编译

  • 在 PostgreSQL 中,您不能 ALTER 具有依赖对象的对象使这些依赖对象无效。您必须删除并重新创建依赖对象。

失败的 CREATE INDEX 命令可能会留下无效索引。