2017-10-17 23 views
2

J'ai essayé ci-dessous les commandes comme postgres (super) utilisateur et l'utilisateur propriétaire:Comment déposer un index dans PostgreSQL 9.6?

Drop index <index_name>; 
Drop index <index_name> cascade; 
Drop index concurrently <index_name>; 

La requête ne donne pas d'erreur, mais est dans l'état accroché pour toujours jusqu'à annulé.

+2

Vos déclarations sont ok en général. Vous avez probablement d'autres tâches en cours d'exécution dans votre base de données qui empêchent l'achèvement. – clemens

+0

Oui, cela peut être le cas. Est-il possible de savoir quelle requête/session utilise l'index? – user5579599

+3

https://wiki.postgresql.org/wiki/Lock_Monitoring –

Répondre

4

Vos déclarations sont correctes en général. Il existe d'autres processus ayant des verrous sur les index empêchant les instructions de fin de se terminer. Vous pouvez voir les instructions actives avec

SELECT * FROM pg_stat_activity; 

Vous devez définir log_statement de façon appropriée si nécessaire.

Edit:pg_locks vous donnera des informations sur les verrous spécifiques:

SELECT a.datname, 
     c.relname, 
     l.transactionid, 
     l.mode, 
     l.GRANTED, 
     a.usename, 
     a.query, 
     a.query_start, 
     age(now(), a.query_start) AS "age", 
     a.pid 
    FROM pg_stat_activity a 
    JOIN pg_locks   l ON l.pid = a.pid 
    JOIN pg_class   c ON c.oid = l.relation 
    ORDER BY a.query_start; 
+1

Oui, cela a fonctionné. Après avoir fermé les sessions dépendantes, j'ai été capable de supprimer l'index. – user5579599

+0

'pg_locks' sera souvent plus informatif. –

+0

@CraigRinger: Vous avez raison. J'ai prolongé ma réponse. – clemens