PostgreSQL 9.2/PostGIS 2.0.2では、空間列にインデックスがあり、
CREATE INDEX tiger_data_sld_the_geom_Gist ON tiger_data.sld USING Gist(the_geom);
その後でインデックスを削除しました
DROP INDEX tiger_data_sld_the_geom_Gist;
しかし、今、私が再作成しようとすると、次のエラーが発生します。
# CREATE INDEX tiger_data_sld_the_geom_Gist ON tiger_data.sld USING Gist(the_geom);
ERROR: relation "tiger_data_sld_the_geom_Gist" already exists
再度ドロップしても機能しません。それはインデックスが存在しないと言います:
# DROP INDEX tiger_data_sld_the_geom_Gist;
ERROR: index "tiger_data_sld_the_geom_Gist" does not exist
データベースオブジェクトのリストでリレーション "tiger_data_sld_the_geom_Gist"を見つけられず、DROP TABLEを試して、解決策を探しました。
この謎の関係「tiger_data_sld_the_geom_Gist」とは何ですか?インデックスを作成できるように、それをどのように削除しますか?
編集:
また、サーバーを再起動して、テーブルをダンプ/ドロップ/リロード(CASCADEでドロップ)してみました。
search_path
GUCをtiger_data
スキーマに設定する(または少なくとも含める)場合を除き、スキーマをインデックス名に追加してDROP INDEX
を発行する必要があります(安全のため、どの場合でも使用します)。
DROP INDEX tiger_data.tiger_data_sld_the_geom_Gist;
これは、インデックスが常にそれが属するテーブルの同じスキーマに移動するためです。上記の方法で問題が解決しない場合は、このリレーション名が存在するかどうか、およびそれが含まれている各スキーマに次のようにしてチェックできます。
SELECT r.relname, r.relkind, n.nspname
FROM pg_class r INNER JOIN pg_namespace n ON r.relnamespace = n.oid
WHERE r.relname = 'tiger_data_sld_the_geom_Gist';
tiger_data_sld_the_geom_Gist
という名前のリレーションの種類(インデックスはi
、テーブルはr
、シーケンスはS
、ビューはv
)を返します。所属するスキーマの名前。
特に効率的ではありませんが、これでうまくいったようです: