J'avais déjà posé cette question en septembre de l'année dernière, mais suites à des changement de directives, j'ai été contrains d'abandonner mon projet.
Toutefois, ce projet est à nouveau au goût du jour, et je souhaite à nouveau supprimer un nombre important de tables.
Vous trouverez l'ancien post ici



J'ai essayé les deux fonctions suivantes :

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
19
 
CREATE OR REPLACE FUNCTION "public"."droppertables" (text) RETURNS integer AS
$body$
 
DECLARE
 enregs record;
 compteur integer = 0 ;
BEGIN
 FOR enregs IN SELECT tablename FROM pg_tables WHERE tablename like '%'||$1 LOOP
  EXECUTE ''DROP TABLE '' || quote_ident(enregs.tablename)
  compteur:=compteur+1;
 END LOOP;
 return compteur;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
 
 
SELECT droppertables('MonPrefixe');
Mais j'obtiens un résultat nul, ce qui signifie qu'aucune table n'a été selectionnée.



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
19
 
CREATE OR REPLACE FUNCTION "public"."droppertables" (text) RETURNS integer AS
$body$
 
DECLARE
 enregs record;
 compteur integer = 0 ;
BEGIN
 FOR enregs IN SELECT tablename FROM pg_tables WHERE tablename ~ $1 LOOP
  EXECUTE ''DROP TABLE '' || quote_ident(enregs.tablename)
  compteur:=compteur+1;
 END LOOP;
 return compteur;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
 
 
SELECT droppertables('^MonPrefixe');
Mais j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
ERROR:  syntax error at or near "DROP"
CONTEXT:  PL/pgSQL function "droppertables" line 9 at execute statement
J'avoue ne pas comprendre ou peut se situer cette erreur.



Je profite de ce fil pour ajouter une seconde question :
Les tables que je supprime sont des tables à composante spatiale, il me faut donc aussi supprimer la ligne associée dans la table "geometry_columns". J'ai essayé de modifier la fonction pour supprimer cette ligne mais j'avoue avoir échoué.

En vous remerciant par avance.