PostgreSQL批量修改列名大小写

在PostgreSQL中默认是大小写敏感的,并默认会将SQL语句转化为小写。

今天碰到同事在GP里面建表的时候给列名加上引号,如下:

create table t3("ID" int,"INFO" text);

这样会导致将列名变成了大写,那么如果直接查询就会报错:

bill@bill=>select id from t3;
ERROR:  column "id" does not exist
LINE 1: select id from t3;
               ^
bill@bill=>select ID from t3;
ERROR:  column "id" does not exist
LINE 1: select ID from t3;
               ^

结果同事在gp里面建了几十张表都是这样,准备用talend进行抽数时就出现错误:
ERROR: missing data for column “referenceid”

不过还好我们可以通过information_schema.columns视图去查询哪些列是大写的,来实现批量修改的功能。

select * from information_schema.columns 
where table_schema='dwd' 
and table_name<>'pg_stat_statements' 
and column_name <> lower(column_name);

既然可以查出来,那么我们新建一个函数就可以实现批量修改的功能了:

create or replace function f_exec()
	returns void as $$
	declare 
		x varchar(500);
begin
	for x in(
	SELECT
    'alter table "' || table_name || '" rename column  "' || column_name || '" to ' || lower( column_name ) || ';' alter_column
FROM
    information_schema.columns 
WHERE
    table_schema = 'dwd' 
    AND column_name <> lower(column_name)
    AND table_name<>'pg_stat_statements') 
	loop
		execute  x ;
    end loop;
end;
$$ language plpgsql;

最后执行该函数,大功告成!

bill@bill=>select f_exec();
 f_exec
--------

(1 row)

猜你喜欢

转载自blog.csdn.net/weixin_39540651/article/details/112610551