PostgreSQL 大小写问题 一键修改表名、字段名为小写 阅读模式


标准的SQL是不区分大小写的。但是PostgreSQL对于数据库中对象的名字允许使用支持大小写区分的定义和引用方法。方式就是在DDL中用双引号把希望支持大小的对象名括起来。
比如希望创建一个叫AAA的表。如果用CREATE TABLE AAA (...);的话,创建出来的表实际上是aaa。
如果希望创建大写的AAA表的话,就需要用CREATE TABLE "AAA" (...);这种双引号的方式定义对象名。
这样写的缺点是查询语句必须也使用双引号的方式引用对象名。比如SELECT * FROM "AAA";否则PostgreSQL缺省会去找aaa这个对象,然后返回aaa不存在的错误。需要注意的是不仅仅是表可以这样定义和引用,对PostgreSQL中的任意对象(比如列名,索引名等)都有效。


创建exec(sqlstring)函数方便执行

CREATE OR REPLACE FUNCTION "public"."exec"("sqlstring" varchar)
  RETURNS "pg_catalog"."varchar" AS $BODY$
    declare
        res varchar(50);
    BEGIN
        EXECUTE sqlstring;
        RETURN ok;
    END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100


通过条件拼接SQL,修改某表 column为小写

-- 根据条件查询qrtz_calendars表,所有大写的column
select * from information_schema.columns where table_schema = public and table_name = qrtz_calendars

-- 修改条件后,通过下列语句转换column_name中的大写字母
SELECT
    exec(alter table " || table_name || " rename column  " || column_name || " to  || lower( column_name ) || ;)
FROM
    information_schema.COLUMNS 
WHERE
    table_schema = public 
    AND column_name <> lower(column_name)
    AND table_name = qrtz_triggers;


修改表名为小写

-- 查询大写的table_name
SELECT * FROM information_schema.TABLES WHERE   table_schema = public AND table_catalog = Guns AND table_name <> lower( table_name );

-- 修改表名中的大写为小写
SELECT
    exec ( alter table " || table_name || " rename to  || lower( table_name ) || ; ) 
FROM
    information_schema.tables 
WHERE
    table_schema=public 
    and table_catalog = Guns 
    and table_name <> lower(table_name);

PostgreSQL 大小写问题 一键修改表名、字段名为小写 阅读模式

上一篇:mysql5.6.24 版本上创建实例并授权操作


下一篇:mongodb占用大量内存