PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 07/02/2020 13:09:10

User2020
Membre

pg_stat_user_tables pour vues simples et vues materializées

Bonjour,

je souhaite récupérer le nombre de colonnes et de lignes des vues d'un schéma. J'ai des vues simples (23) et des vues matérialisées (13). Seulement, le script ne me sort les résultats que pour les vues matérialisées.
Mon script est le suivant :

with a AS (
SELECT schemaname,relname,n_live_tup
  FROM pg_stat_user_tables
  WHERE schemaname IN ('Schema')
  ),

b AS (
select table_name, count(*) as column_count
from information_schema."columns"
where table_schema IN ('Schema')
GROUP by table_name order by column_count
  )

SELECT a.*, b.column_count
FROM
a
FULL JOIN b ON a.relname = b.table_name
ORDER BY schemaname, relname
;

Un idée ?

Merci

Hors ligne

#2 07/02/2020 13:22:41

gleu
Administrateur

Re : pg_stat_user_tables pour vues simples et vues materializées

Une vue ne contient pas de données, ce n'est qu'une requête préenregistrée. Il vous faut donc faire un SELECT count(*) sur chaque vue, ce qui n'est pas forcément une bonne idée pour les performances.


Guillaume.

Hors ligne

#3 07/02/2020 14:51:49

User2020
Membre

Re : pg_stat_user_tables pour vues simples et vues materializées

Merci pour votre réponse.

Cependant, la requête fonctionne bien sur les vues (dans le schéma en question je n'ai que des vues, aucune table). Peut-être que je n'utilise pas les bonnes fonctions ?

En fait la sous-requête 'a' ne sort les infos que les vues matérialisées et la sous-requête 'b', que les infos des vues simples. Or, je voudrais que ces 2 sous-requêtes prennent en comptes les 2 types de vue.

Hors ligne

#4 07/02/2020 15:57:40

gleu
Administrateur

Re : pg_stat_user_tables pour vues simples et vues materializées

Sur la première sous-requête, pg_stat_user_tables contient des statistiques uniquement pour les tables et vues matérialisées (donc comme il n'y a pas de tables dans ce schéma pour vous, vous n'y retrouvez que les vues matérialisées).

Sur la deuxième sous-requête, cela attaque le schéma information_schema que je connais très peu, donc prendre le reste avec des pincettes. Vous interrogez la vue columns. Celle-ci ne renvoie que les colonnes de chaque table. Une vue n'a de colonnes qu'au moment où on l'exécute, l'info n'est pas connu avant (ou même après). Donc logiue que vous n'y trouviez pas les colonnes des vues dans cette vue.

Personnellement, je ferais une requête sur pg_class et pg_attribute pour retrouver les infos sur les vues et vues matérialisées. Ceci étant dit, cela ne vous donnera ni le nombre de lignes ni le nombre de colonnes pour les vues. Vous n'aurez ces informations que pour les vues matérialisées.

Enfin, dernier point, n_live_tup n'est pas forcément exact. Ça peut même être très loin de la réalité.


Guillaume.

Hors ligne

Pied de page des forums