web-dev-qa-db-fra.com

Postgresql recherche l'espace disque total utilisé par une base de données

J'ai plus de 50 bases de données hébergées sur mon serveur postgresql. J'ai besoin de déplacer certains d'entre eux sur un autre hôte pour libérer de l'espace disque, mais comment puis-je mesurer l'espace disque utilisé par chaque base de données sur mon volume?

Existe-t-il une fonction pour obtenir les informations que je souhaite?

39
pylover
SELECT pg_database_size('geekdb')

ou

SELECT pg_size_pretty(pg_database_size('geekdb'))

http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-commands-with-examples/

56
Robert Harvey

Vous pouvez utiliser les méta-commandes postgresql:

  • \l répertorierait les bases de données
  • \l+ étend la liste avec Taille, Espace disque logique, Description.

Utilisation \? pour obtenir la liste complète des méta-commandes. Voir également: https://www.postgresql.org/docs/9.5/static/app-psql.html

24
sharez

J'adore la réponse du grimpeur. J'ai modifié le cron pour renvoyer des octets et supprimer la ligne d'en-tête comme suit.

* * * * * df -B1 | tail -n+2 | awk '{print $1","$2","$3","$4","$5","$6}' > /var/www/diskspaceinfo.csv
1
Steve Lloyd

C'est une vieille question, mais j'ai créé un moyen de voir les résultats de la commande linux df -h (Système de fichiers, Taille, Utilisé, Disponible, Utiliser%, Monté sur) via une requête SQL, donc votre espace disque libre et l'espace disque total disponible pour un système de fichiers donné. Pas exactement sur quoi porte la question, mais utile pour certains utilisateurs/moi. Je souhaite que cette réponse soit ici il y a des heures, donc je la mets ici (Linux uniquement):

créer un travail cron comme celui-ci:

@hourly df -h | awk '{print $1","$2","$3","$4","$5","$6}' > /pathhere/diskspaceinfo.csv`

créer une table étrangère à interroger:

create extension file_fdw;

create server logserver FOREIGN DATA WRAPPER file_fdw;

CREATE FOREIGN TABLE diskspaceinfo 
(file_sys text, size text, used text, avail text, used_pct text, mount text) 
SERVER fileserver 
OPTIONS (filename '/pathhere/diskspaceinfo.csv', format 'csv');

Ensuite, interrogez votre table comme ceci:

select * from diskspaceinfo

Si vous voulez juste quelque chose de spécifique, bien sûr, filtrez simplement le tableau pour ce que vous voulez. Il a des limites, mais il est très utile pour moi.

Si vous avez plperlu, vous pouvez utiliser cette fonction: https://wiki.postgresql.org/wiki/Free_disk_space

Un lien utile: https://wiki.postgresql.org/wiki/Disk_Usage

1
mountainclimber