PostgreSQL查询将列更改为大写

时间:2018-11-18 16:11:17

标签: database postgresql database-migration

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

是否有一种很好的方法可以使"AO_"表列全部大写。仅对400个表(每个表大约10列)执行此操作似乎不太有效:

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

也许可以使用某种通配符来获取“ AO_”表,然后将所有列都大写吗?

1 个答案:

答案 0 :(得分:0)

我建议您不要这样做,而我引用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