sql >> データベース >  >> RDS >> PostgreSQL

Postgresで無効なオブジェクトを識別して削除するために利用できるオプションは何ですか(例:破損したインデックス)

    「無効な」(作成が不十分な)インデックスの検出について言及している場合、Postgresはインデックスを作成しようとして「失敗」する可能性があり、クエリプランナーはそれらをシステムに存在していても使用しません。このクエリは「失敗した」インデックスを検出します:

    https://www.enterprisedb.com/blog/pgupgrade -bug-invalid-concurrently-created-indexes

    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'
    

    TOASTテーブルのインデックスを検出しても問題はないと思いますが、クエリのその部分を削除できます:)

    関連して、私にとっては、テーブルで新しいANALYZEを実行するだけで、インデックスが突然本番環境で使用され始めることがあります(つまり、インデックスが「無効」でなくても、ANALYZEが実行されるまで使用されない場合があります)。奇妙な。



    1. 1つのトランザクションでのSQLServerの代替同義語

    2. Symfony/PHP-単一の値を保存するための最良の方法

    3. mysqlドライバーをjbossに追加できません

    4. JDBCを使用してOracleテーブルからXMLTYPE列を抽出しようとしていますが、いくつか問題があります。