Je viens d’Oracle chez Postgres et je cherche un moyen de trouver la taille de la table et de l’index en termes d’octets / Mo / Go / etc., voire d’améliorer la taille de toutes les tables. Dans Oracle, j'avais une longue requête méchante qui visait user_lobs et user_segments pour donner une réponse. Je suppose que dans Postgres, je peux utiliser quelque chose dans les tables information_schema, mais je ne vois pas où. Merci d'avance.
Réponses
Trop de publicités?Essayez les fonctions de taille d'objet de base de données . Un exemple:
SELECT pg_size_pretty(pg_total_relation_size('"schema"."Table"'));
Pour toutes les tables, quelque chose dans les lignes de:
SELECT
table_schema || '.' || table_name AS table_full_name,
pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY
pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC
Edit: Voici la requête soumise par @phord, pour plus de commodité:
SELECT
table_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes
Je l'ai légèrement modifié pour utiliser pg_table_size()
afin d'inclure des métadonnées et de faire en sorte que les tailles s'additionnent.
Afficher les tailles de base de données:
\l+
par exemple
=> \l+
berbatik_prd_commerce | berbatik_prd | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 19 MB | pg_default |
berbatik_stg_commerce | berbatik_stg | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8633 kB | pg_default |
bursasajadah_prd | bursasajadah_prd | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 1122 MB | pg_default |
Afficher les tailles de table:
\d+
par exemple
=> \d+
public | tuneeca_prd | table | tomcat | 8192 bytes |
public | tuneeca_stg | table | tomcat | 1464 kB |
Fonctionne uniquement en psql
.
(Résumé de la réponse de @ zkutch .)
Les tables PostgreSQL ont trois composants: la table elle-même, ses index et éventuellement les données TOAST. Quelques exemples montrent comment glisser et dés les informations disponibles de différentes manières sur http://wiki.postgresql.org/wiki/Disk_Usage