我正在使用pgloader进行从MySQL到PostgreSQL数据库的迁移。我面临的问题之一是我的应用程序正在寻找以"ao_"
开头的任何表都是"AO_"
,我可以通过将它们全部大写来解决,但是相应的列也需要大写。
是否有一种很好的方法可以使"AO_"
表列全部大写。仅对400个表(每个表大约10列)执行此操作似乎不太有效:
ALTER TABLE "AO_54307E_QUEUE" RENAME project_id TO "PROJECT_ID";
也许可以使用某种通配符来获取“ AO_”表,然后将所有列都大写吗?
答案 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$$;