Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 27/04/2015 09:53:21
- mortimer.pw
- Membre
Déclarer liste
Bonjour,
Je travaille sous CenOS 5.9 avec un moteur PostgreSQL 9.3.2.
Je souhaite écrire une Fonction qui, avec une liste de tables définie dans la partie DECLARE, exécute par exemple un SELECT COUNT(*) FROM "table de la liste" et insère le résultat dans une table.
Est-t-il possible de définir des listes, ou des tableaux, ou autres, dans la partie DECLARE ?
D'avance merci pour les réponses.
Hors ligne
#2 27/04/2015 20:58:10
- gleu
- Administrateur
Re : Déclarer liste
Des tableaux, oui. Pas des listes.
Guillaume.
Hors ligne
#3 28/04/2015 09:25:53
- mortimer.pw
- Membre
Re : Déclarer liste
Bonjour Guillaume,
Oui, merci. J'ai finalement trouvé.
Pour ceux que cela intéresse :
CREATE OR REPLACE FUNCTION infos_tables() RETURNS void AS
$BODY$
DECLARE
cSchema VARCHAR;
cTable VARCHAR;
tTabSchema VARCHAR[]:=ARRAY['toto','tata','titi'];
tTabToto VARCHAR[]:=ARRAY['table1','table2','table3'];
tTabTata VARCHAR[]:=ARRAY['table1','table2','table3','table4','table5'];
tTabTiti VARCHAR[]:=ARRAY['table1','table2','table3','table4'];
nNbEnr INTEGER;
nSize BIGINT;
BEGIN
DELETE FROM infos_table_snap WHERE EXTRACT(DAYS FROM CURRENT_TIMESTAMP-now)::INTEGER>60;
FOREACH cSchema IN ARRAY tTabSchema LOOP
FOREACH cTable IN ARRAY CASE WHEN cSchema='toto' THEN tTabToto ELSE CASE WHEN cSchema='tata' THEN tTabTata ELSE CASE WHEN cSchema='titi' THEN tTabTiti END END END LOOP
EXECUTE 'SELECT COUNT(*) FROM '||cSchema||'.'||cTable INTO nNbEnr;
EXECUTE 'SELECT PG_TABLE_SIZE('||CHR(39)||cSchema||'.'||cTable||CHR(39)||')/1024/1024' INTO nSize;
EXECUTE 'INSERT INTO infos_table_snap(now,schema_name,table_name,nb_enr,size) VALUES('||'CURRENT_TIMESTAMP'||','||CHR(39)||cSchema||CHR(39)||','||CHR(39)||cTable||CHR(39)||','||nNbEnr||','||nSize||')';
RAISE NOTICE 'Extraction infos Table : %.%',cSchema,cTable;
END LOOP;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
Hors ligne
Pages : 1