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

#1 02/02/2012 16:20:15

marc.stx
Membre

Supression de tables

Bonjour,

Ayant du mal à comprendre le pl/pgsql, je fais appel à votre aide.

Comment faire pour supprimer dans une base toutes les tables qui commencent par une lettre donnée ?

CREATE OR REPLACE FUNCTION drop_table...

En vous remerciant !

Marc

PS > modérateur : je me suis trompé de forum à placer dans pl/pgsql

Dernière modification par marc.stx (02/02/2012 16:49:00)

Hors ligne

#2 03/02/2012 08:49:20

gleu
Administrateur

Re : Supression de tables

Que vous ayez du mal à comprendre le PL/pgsql, je peux le comprendre mais je suppose que vous avez commencé à écrire la procédure stockée et que ce que vous avez écrit ne fonctionne pas. Donc commencez par montrer ce que vous avez fait. Et on continuera à partir de ça.


Guillaume.

Hors ligne

#3 03/02/2012 19:40:32

marc.stx
Membre

Re : Supression de tables

Hélas je n'ai encore rien fait, je ne comprends vraiment rien à pl/sql ! sad
Je suppose juste que la commande que je veux réaliser passe par une fonction (ou peut être par un trigger).
Je m'explique : j'ai créé des tables à la volée à l'aide d'un ETL, mais j'ai fait une erreur de configuration... et 400 tables ont été intégrées d'un seul coup dans ma base. Ces tables ayant le même préfixe, j'aimerai pouvoir les supprimer toutes en même temps. Si cela est possible.

Hors ligne

#4 06/02/2012 22:55:19

gleu
Administrateur

Re : Supression de tables

Déjà, ce n'est pas pl/sql, mais pl/pgsql.

Si le préfixe est connu, il suffit de faire ça :

DO LANGUAGE plpgsql
DECLARE
  s text;
  t text;
BEGIN
  FOR s, t IN SELECT schemaname, relname FROM pg_class WHERE relname IN 'prefixe_ici%'
  LOOP
    PERFORM 'DROP TABLE '||quote_ident(s)||'.'||quote_ident(t);
  END LOOP;
END;

Pas testé, juste une aide de départ. À vous de tester derrière (sur une base de TESTS) pour vérifier que tout va bien. Et essayer de comprendre le code avant de l'exécuter pour savoir quoi modifier (le préfixe). Et le corriger le cas échéant.


Guillaume.

Hors ligne

Pied de page des forums