Bonjour,
J'écris une petite procédure permettant de désactiver les clés étrangères de toutes les tables via l'interrogation de information_schema et l'utilisation de la requête ALTER TABLE matable DISABLE TRIGGER ALL .
Code SQL : 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 CREATE OR REPLACE PROCEDURE monschema.pr_disable_all_triggers( ) LANGUAGE 'plpgsql' AS $BODY$ DECLARE sqlquery varchar; tablelist CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = 'monschema'; BEGIN FOR tablename IN tablelist LOOP sqlquery := 'ALTER TABLE monschema.' || tablename || ' DISABLE TRIGGER ALL;'; EXECUTE sqlquery; END LOOP; END; $BODY$;
La syntaxe est acceptée lors de l'enregistrement dans pgAdmin 4 mais lors de l'exécution, j'obtiens une erreur de syntaxe :
Il n'y a pas de parenthèses dans ma procédure mais PostgreSQL en a ajouté autour du nom de la tableERROR: syntax error at or near "("
LIGNE 1 : ALTER TABLE monschema.(activation_status) DISABLE TRIGGER ALL;
^
REQUÊTE : ALTER TABLE monschema.(activation_status) DISABLE TRIGGER ALL;
CONTEXTE : PL/pgSQL function monschema.pr_disable_all_triggers() line 11 at EXECUTE
État SQL : 42601
Contexte : PL/pgSQL function monschema.pr_disable_all_triggers() line 11 at EXECUTE
Pourquoi et comment puis-je éviter cela ?
Partager