Nếu bạn đang đề cập đến việc phát hiện các chỉ mục "không hợp lệ" (được tạo kém), dường như Postgres có thể "thất bại" trong nỗ lực tạo chỉ mục và sau đó trình lập kế hoạch truy vấn sẽ không sử dụng chúng, mặc dù chúng tồn tại trong hệ thống của bạn. Truy vấn này sẽ phát hiện các chỉ mục "không thành công":
https://www.enterprisedb.com/blog/pgupgrade -bug-không hợp lệ-đồng thời-được tạo-chỉ mục
SELECT n.nspname, c.relname
FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n,
pg_catalog.pg_index i
WHERE (i.indisvalid = false OR i.indisready = false) AND
i.indexrelid = c.oid AND c.relnamespace = n.oid AND
n.nspname != 'pg_catalog' AND
n.nspname != 'information_schema' AND
n.nspname != 'pg_toast'
mặc dù tôi cho rằng việc phát hiện các chỉ mục bảng TOAST sẽ không ảnh hưởng gì, vì vậy bạn có thể xóa phần đó của truy vấn :)
Có liên quan, đối với tôi, đôi khi chỉ cần chạy một PHÂN TÍCH mới trên một bảng cũng làm cho các chỉ mục đột nhiên bắt đầu được sử dụng trong quá trình sản xuất (tức là ngay cả khi các chỉ mục không "không hợp lệ", chúng có thể không được sử dụng cho đến khi ANALYZE chạy). Kỳ lạ.