lunes, 11 de enero de 2016

Nombres de campos de tablas a minusculas postgresql

Hace poco estaba trabajando con un software que exporta los nombres de los campos de las tablas en mayúscula. El problema de esto es que en postgresql, es necesario utilizar comillas para indicar un campo en mayúscula, ejemplo "NOMBRE", y si hubiera que utilizar ese cambo muchas veces es necesario cambiarlo a todo.

Lo más recomendable es pasarlo a minúsculas, bueno, el problema a parte de solo pasar los nombres de los campos a minúsculas, es que tenía 43 tablas, y cada tabla tenía aproximandamente 10 cambos, es decir, que tenía que ejecutar más de 340 script's sql para cambiar nombre de columnas de las tablas.

Hasta cierto punto esto es tedioso, sobre todo porque, requiero actualizar la base de datos cada cierto tiempo.

De tal modo que requería una función en postgresql para buscar los campos de todas las tablas de la base de datos que estén en mayúscula y pasarlas a minúscula, todo eso en una sola función.

Y aquí está dicha función:
do language plpgsql $$
declare
    r record;
    sche varchar(12);
begin
    -- el esquema lo cambian a conveniencia
    sche = 'mgm';
    for r in
        select relname, attname
        from pg_attribute a
        inner join pg_class c on a.attrelid = c.oid
        inner join pg_namespace n on c.relnamespace = n.oid
        where
            n.nspname = 'mgm'
            and
            attname != lower(attname)
            and
            not attisdropped
    loop
        execute format(' alter table %1$s.%1$I rename column %2$I to %3$s ', sche,r.relname, r.attname, lower(r.attname));
    end loop;
end;
$$;

En esta función lo único que hay que cambiar es el esquema al que queremos cambiarle los nombres de los campos de las tablas.

0 comments:

Publicar un comentario