如何在 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
命令可能会留下无效索引。
寻找视图我可以列出 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
命令可能会留下无效索引。