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.

Comentarios:

@