就是下面的三行SQL语句了。
通过查找符合指定条件的表,然后循环,把符合条件的表的指定column的数据类型修改为指定的数据类型。
这里%I出来了两次,是Postgresql的定义用法,在这里指对应的表名和行名。如果换成其它的会报错。
DO $$ DECLARE rec RECORD;
begin for rec in (select table_name,column_name from information_schema.columns where table_schema = 'xxx' and table_name like 'yyy_%'
and column_name in ('colA','colB') and data_type='integer') loop execute format('ALTER TABLE %I ALTER COLUMN %I TYPE bigint', rec.table_name, rec.column_name); end loop; END $$;
格式化一下,变成这样。
DO $$DECLARE rec RECORD;
BEGIN FOR rec IN (
SELECT table_name,column_name FROM information_schema.columns WHERE table_schema = 'xxx' AND table_name LIKE 'yyy_%'
AND column_name IN ('colA','colB') AND data_type='integer')
LOOP
EXECUTE FORMAT('ALTER TABLE %I ALTER COLUMN %I TYPE bigint', rec.table_name, rec.column_name);
END LOOP;
END $$;
随手记录一下,供下次使用参考。