2009-09-14 10 views
1

Je veux aspirer une base de données PostgreSQL à partir de PHP.PostgreSQL DB sous vide de PHP

J'ai essayé:

pg_query($conn,"vacuum analyse;"); 

Comment puis-je savoir si cela fonctionne?

Répondre

3

Exécutez cette requête avant et après l'exécution de la requête de vide. Si «l'âge» est inférieur à ce qu'il était avant le vide, le vide a fonctionné avec succès.

SELECT age(datfrozenxid) as age FROM pg_database where datname='your_db'; 
4

Première question: pourquoi avez-vous fait VIDE COMPLET? Cela n'a pas de sens. Il devrait être pratiquement jamais appelé. Deuxièmement: L'exécution de vide à partir de php (probablement une page Web) peut être problématique. Le vide peut facilement prendre plus de 3 minutes, ce qui est (si je me souviens bien) standard timeout pour les demandes Web.

La meilleure solution est d'utiliser autovacuum. Si vous ne pouvez pas utiliser autovacuum, planifiez des appels vacuumdb en utilisant cron.

+0

Supprimé "FULL", vous avez raison. – Liam

+0

Timeout n'est pas un problème, c'est un script PHP qui est appelé par cron et wget et effectue plusieurs autres tâches de maintenance. – Liam

+1

Si vous avez accès à cron, pourquoi n'appelez-vous pas directement vacuumdb? –

1

En supposant que votre vide s'exécute pendant plus de quelques secondes, vous pouvez exécuter "SELECT * FROM pg_stat_activity" dans un client postgres pour obtenir une liste des requêtes en cours d'exécution. Votre requête VACUUM devrait apparaître là-bas.