J'ai un tas de table qui ont une colonne (stat pour l'état ;-)résultat poignée lorsque SQL dynamique est dans une boucle
« stat » Je voudrais que le nombre de chaque stats, et vois!
Mes tableaux ressemblent à ce
create table a (
a_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
a_stat status_t
);
create table b (
b_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
b_stat status_t
);
status_t
est un ENUM.
Je l'ai fait:
DO $$
DECLARE
tableName RECORD;
result RECORD;
BEGIN
SET SEARCH_PATH = projet, public;
FOR tableName IN SELECT
c.relname,
a.attname
FROM pg_class AS c
INNER JOIN pg_attribute AS a ON a.attrelid = c.oid
WHERE a.attname LIKE '%stat' AND c.relkind = 'r' LOOP
EXECUTE format('SELECT %I, count(%I) FROM %I GROUP BY %I',
tableName.attname, tableName.attname, tableName.relname, tableName.attname) INTO result;
SELECT * FROM result;
END LOOP;
END;
$$;
Il y a des choses que je pense que je ne fais pas bien ici.
- Il est peut-être une meilleure forme format
- Je ne peux pas sélectionner un enregistrement, je pense que le type de données n'est pas bon (mais ne peut pas savoir quel type je devrais utiliser)
- Une sélection à l'intérieur d'une boucle for n'est pas une bonne idée (je pense?) Mais je n'ai pas trouvé comment mettre
result
dans un tableau de résultat, et l'afficher après la boucle for.
Comment faire cela correctement?
Quel est le "nombre de chaque statistiques"? Toutes les lignes? Lignes non nulles? Autre chose? –