Comment faire pour obtenir l'actuel, de l'espace disque libre dans Postgres?
J'ai besoin d'être sûr que j'ai au moins 1 go d'espace libre sur le disque avant de commencer à faire des travaux dans ma base de données. Je suis à la recherche de quelque chose comme ceci:
select pg_get_free_disk_space();
Est-il possible? (Je n'ai rien trouvé à ce sujet dans les docs).
PG: 9.3 & OS: Linux/Windows
Pire des cas, vous pourriez probablement écrire un vous-même à l'aide d'un sans restriction de langue de la procédure comme pl/perlU. Vérifiez également pgxn.org si vous ne l'avez pas déjà.
voir cette réponse (question similaire): stackoverflow.com/questions/14346371/...
voir cette réponse (question similaire): stackoverflow.com/questions/14346371/...
OriginalL'auteur Christian | 2015-04-22
Vous devez vous connecter pour publier un commentaire.
PostgreSQL n'a pas actuellement les fonctionnalités d'exposer directement de l'espace disque.
Pour une chose, le disque? Une production instance PostgreSQL ressemble souvent à ceci:
/pg/pg94/
: un RAID6 de rapide et fiable de stockage sur une batterie de secours contrôleur RAID en mode de balance des blancs, pour les catalogues et les données les plus importantes/pg/pg94/pg_xlog
: rapide fiable RAID1, pour les journaux de transactions/pg/tablespace-lowredundancy
: Un RAID 10 de rapide pas cher de stockage pour des choses comme les index et lesUNLOGGED
tables que vous ne vous inquiétez pas à propos de la perte de sorte que vous pouvez utiliser moins de redondance de stockage/pg/tablespace-bulkdata
: Un RAID6 ou similaires de la lenteur de près de la ligne magnétique de stockage utilisé pour les vieux journaux d'audit, des données historiques, écrivez-la plupart des données, et d'autres choses qui peuvent être plus lents à l'accès.Puis il y a le fait que l'espace "libre" ne veut pas forcément dire PostgreSQL peut l'utiliser (pense: les quotas de disque, réservée au système de l'espace disque), et le fait que la liberté d' blocs/octets n'est pas la seule contrainte, comme de nombreux systèmes de fichiers ont des limites sur le nombre de fichiers (inodes).
Comment un
SELECT pg_get_free_disk_space()
rapport à cela?Sachant que l'espace disque libre pourrait être un problème de sécurité. Si la prise en charge, c'est quelque chose que j'avais seulement être exposé à des super-utilisateur, au moins.
Ce que vous peut faire est d'utiliser un non approuvés langage procédural comme
plpythonu
de faire des appels de système d'exploitation de s'interroger sur le système d'exploitation hôte pour l'espace disque de l'information, à l'aide de requêtes contrepg_catalog.pg_tablespace
et à l'aide de ladata_directory
réglage depg_settings
à découvrir d'où PostgreSQL est de garder les choses sur le système d'exploitation hôte. Vous devez également vérifier pour les points de montage (unix/Mac) /points de jonction (Windows) pour découvrir sipg_xlog
, etc, sont sur de stockage distinct. Ce ne sont pas vraiment vous aider avec de l'espace pour les journaux, mais les.Que j'aimerais avoir un
SELECT * FROM pg_get_free_diskspace
qui a signalé le principal datadir de l'espace, et tout les points de montage du ou des points de jonction à l'intérieur comme pourpg_xlog
oupg_clog
, et également signalés chaque tablespace et tout les points de montage à l'intérieur. Ce serait un retour de fonction. Quelqu'un qui se soucie assez aurait de la peine de la mettre en œuvre pour toutes les plateformes cibles bien, et maintenant, personne ne veut-il suffisant pour faire le travail.Dans le temps de le dire, si vous êtes prêt pour simplifier vos besoins:
alors vous pouvez
CREATE LANGUAGE plpython3u;
etCREATE FUNCTION
unLANGUAGE plpython3u
fonction qui fait quelque chose comme:dans une fonction qui
returns bigint
et prend soitdatadir_path
comme un argument, ou découvre-il en faisant un SPI requête commeSELECT setting FROM pg_settings WHERE name = 'data_directory'
de l'intérieur de PL/Python.Si vous voulez prendre en charge de Windows, voir Croix-plate-forme de l'espace restant sur le volume à l'aide de python . J'aimerais utiliser l'Interface de Gestion Windows (WMI) les requêtes plutôt que d'utiliser ctypes pour appeler l'API de Windows.
Ou vous pourriez utiliser cette fonction, quelqu'un a écrit en PL/Perlu faire à l'aide de
df
etmount
de sortie de la commande de l'analyse, qui ne fonctionnera probablement sur Linux, mais bon, c'est prédéfinies.C'est une excellente réponse! Il y a beaucoup de choses à penser. Merci Craig et "Cheval".
OriginalL'auteur Craig Ringer
Voici un plpython2u mise en œuvre, nous avons été à l'aide pendant un certain temps.
Utilisation est quelque chose comme:
OriginalL'auteur craigds
C
version pour ceux qui veulent encore un outil pour vérifier l'espace libre sur le serveur postgresql.Seulement pour Linux et FreeBSD, besoin d'ajouter bon les en-têtes et définit pour les autres Systèmes d'exploitation.
OriginalL'auteur Vasily Redkin