Bonjour
je cherche a faire un trigger qui me permet de tranquer tous les champs de type texte dans ma base en cas ou le donnée a insérer dépassent la langueur max du champs , du coup j'ai créer une vue qui me retourne ces champs texte

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
CREATE OR REPLACE VIEW my_view AS 
 SELECT c.column_name, c.data_type, c.character_maximum_length
   FROM information_schema.tables t
   JOIN information_schema.columns c ON t.table_name::text = c.table_name::text
  WHERE t.table_schema::text = 'public'::text AND c.data_type::text = 'character varying'::text;
 
ALTER TABLE my_view 
  OWNER TO postgres;

et puis j'ai créer cette fonction substring de mon trigger mais je sais pas si je suis dans le bon chemin

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
18
19
20
CREATE OR REPLACE FUNCTION trancage()
  RETURNS trigger AS
$BODY$
begin
RAISE NOTICE 'START';
NEW.column_name=substring (NEW.column_name for CHAR_LENGTH(column_name));
  RAISE NOTICE  'la valeur tronquée est  %',  NEW.column_name;
  return NEW; 
end;
 $BODY$ LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION trancage_automatique()
  OWNER TO postgres;
 
 
 CREATE TRIGGER trigger
  BEFORE INSERT OR UPDATE
  ON ma_vue
  FOR EACH STATEMENT
  EXECUTE PROCEDURE trancage();

avez vous une idée dans ce propos?