背景:我的postgresql数据库中有一个模式,需要把这个模式下所有的表中字段类型为int2,in4,int8,numeric的字段默认值设置为0,通过编写存储过程的方式实现这一需求。
DO $$
DECLARE r RECORD;
BEGIN FOR r IN SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'db_yw' --这里填写模式名称
AND (data_type IN ('int2', 'int4', 'int8', 'numeric') OR data_type like 'int%') --z需要修改的字段类型
AND column_name NOT IN ('pk_uid', 'id', 'l_id')LOOP EXECUTE 'ALTER TABLE ' || r.table_name || ' ALTER COLUMN ' || r.column_name || ' SET DEFAULT 0'; END LOOP;
END $$;