【问题标题】:PostgreSQL Query to change columns to uppercasePostgreSQL 查询将列更改为大写
【发布时间】:2019-04-21 02:53:38
【问题描述】:

我正在使用 pgloader 将 mySQL 迁移到 PostgreSQL 数据库。我面临的问题之一是我的应用程序正在寻找以"ao_" 开头的任何表为"AO_",我可以通过将它们全部设为大写来解决,但是相应的列也需要为大写。

有没有一种好方法可以让 "AO_" 表列全部大写。仅对 400 个表(每个表大约 10 列)执行此操作似乎效率不高:

ALTER TABLE "AO_54307E_QUEUE" RENAME project_id TO "PROJECT_ID";

是否可以使用某种通配符来抓取“AO_”表,然后将所有列都设为大写?

【问题讨论】:

    标签: database postgresql database-migration


    【解决方案1】:

    我建议你不要这样做,我引用了documentation

    引用标识符也使其区分大小写,而未引用 名称总是折叠成小写。 如果你想编写可移植的应用程序,你是 建议始终引用特定名称或从不引用它。

    因此,引用“仅将“AO_”表列全部大写”似乎是一个的想法。

    如果您仍希望继续,可以使用循环 information_schema.columns 并运行动态 ALTER 语句。

    DO $$
    DECLARE
    rec RECORD;
    
     BEGIN
    
    for rec IN (  SELECT column_name,table_name,table_schema 
                   FROM  information_schema.columns 
                   WHERE   table_name  like 'AO_%'     
                   AND     column_name like 'ao_%'  )
      LOOP
    
       EXECUTE format ( 'ALTER TABLE  %I.%I RENAME %I TO %I' ,            
                         rec.table_schema,rec.table_name,rec.column_name,
                         upper(rec.column_name)) ;
       RAISE NOTICE 'COLUMN %  in Table %.% RENAMED', 
    
    rec.column_name,rec.table_schema,rec.table_name;
    
    
      END LOOP;
    END$$;
    

    Demo

    【讨论】:

    • 太棒了!这很有帮助!谢谢!
    猜你喜欢
    • 2021-10-08
    • 2014-07-28
    • 2020-06-09
    • 2016-07-19
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多