Guest User

Untitled

a guest
Oct 17th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION public.alter_enumtype ( p_enumtypename text, p_values text[] ) RETURNS void AS
  2. $$
  3.     DECLARE
  4.         v_row   record;
  5.         v_query text;
  6.     BEGIN
  7.         v_query := 'CREATE TYPE __' || p_enumtypename || ' AS ENUM (''' || array_to_string( p_values, ''', ''' ) || ''' );';
  8.         EXECUTE v_query;
  9.  
  10.         FOR v_row IN
  11.             SELECT
  12.                     table_schema,
  13.                     table_name,
  14.                     column_name
  15.                 FROM information_schema.columns
  16.                 WHERE
  17.                     data_type = 'USER-DEFINED'
  18.                     AND udt_name = p_enumtypename
  19.                 GROUP BY
  20.                     table_schema,
  21.                     table_name,
  22.                     column_name
  23.                 ORDER BY
  24.                     table_schema,
  25.                     table_name,
  26.                     column_name
  27.         LOOP
  28.             v_query := 'ALTER TABLE ' || v_row.table_schema || '.' || v_row.table_name || ' ALTER COLUMN ' || v_row.column_name || ' TYPE __' || p_enumtypename || ' USING CAST( CAST(' || v_row.column_name || ' AS TEXT) AS __' || p_enumtypename || ');';
  29.             EXECUTE v_query;
  30.         END LOOP;
  31.  
  32.         v_query := 'DROP TYPE ' || p_enumtypename || ';';
  33.         EXECUTE v_query;
  34.  
  35.         v_query := 'ALTER TYPE __' || p_enumtypename || ' RENAME TO ' || p_enumtypename || ';';
  36.         EXECUTE v_query;
  37.     END;
  38. $$
  39. LANGUAGE plpgsql;
  40.  
  41. COMMENT ON FUNCTION public.alter_enumtype ( p_enumtypename text, p_values text[] ) IS 'Modification des valeurs acceptées par un type enum, pour tous les champs qui l''utilisent';
  42.  
  43. -- ----------------------------------------------------------------------------
  44.  
  45. SELECT public.alter_enumtype ( 'type_orient', ARRAY['social','prepro','emploi'] );
Add Comment
Please, Sign In to add comment