DO $$ DECLARE target record; BEGIN FOR target IN SELECT * FROM (VALUES ('student_enrollments', 'created_at'), ('student_enrollments', 'updated_at'), ('student_enrollments', 'removed_at'), ('student_groups', 'created_at'), ('student_groups', 'updated_at'), ('student_group_members', 'created_at') ) AS targets(table_name, column_name) LOOP IF EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = 'public' AND table_name = target.table_name AND column_name = target.column_name AND data_type = 'timestamp without time zone' ) THEN EXECUTE format( 'ALTER TABLE %I ALTER COLUMN %I TYPE TIMESTAMPTZ(3) USING %I AT TIME ZONE ''UTC''', target.table_name, target.column_name, target.column_name ); END IF; END LOOP; END $$;