Bonjour à tous,

j'aimerai faire un "REINDEX DATABASE current_database()", en gros pour éviter de devoir préciser le nom de la BdD, quand je teste mes scripts sur différentes versions de ma BdD, que je nomme différemment à chaque fois.

Je souhaite le faire en SQL ou PL PGSQL.
Voici en rapide avec le DO, ce que j'ai essayé.
En gros, je pensais utiliser EXECUTE. Il fonctionne pour un REINDEX TABLE mais a priori pas pour un REINDEX DATABASE disant :
"--ERREUR: REINDEX DATABASE ne peut pas être exécuté à partir d'1 fonction ou d'1 chaîne contenant plusieurs commandes"

Voyez-vous quelque chose qui manquerait ? Ou une autre façon de faire ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DO $$
DECLARE toto character varying; r record;
BEGIN
	--toto = 'maTable';
	--EXECUTE 'SELECT * FROM "' || toto || '";'; 		--fonctionne
	--EXECUTE 'REINDEX TABLE "' || toto || '";'; --INTO r; 	--fonctionne
 
	toto := current_database();
 
	--ERREUR: REINDEX DATABASE ne peut pas être exécuté à partir d'1 fonction ou d'1 chaîne contenant plusieurs commandes
	--EXECUTE 'REINDEX DATABASE "maBdD";' INTO STRICT r; 
	--EXECUTE 'REINDEX DATABASE "' || toto || '";'; --INTO r;
	--EXECUTE format('REINDEX DATABASE %I;',toto); --INTO r; 
	--EXECUTE 'REINDEX DATABASE "' || toto || '";'; --INTO r;
 
	--EXECUTE 'REINDEX DATABASE $1;' INTO r USING toto; --ERREUR:  erreur de syntaxe sur ou près de « $1 »
END$$;

Merci d'avance.