CREATE OR REPLACE FUNCTION delete_repeat(tablename varchar) RETURNS bigint AS $BODY$ DECLARE rec RECORD; sql varchar; BEGIN RAISE INFO '处理表名:%',tablename; IF NOT exists(select * from pg_class where relname = tablename) then RAISE INFO '处理表不存在:%',tablename; RETURN -1; END IF; FOR rec in EXECUTE('select id from '||tablename||' group by id having count(id) > 1') LOOP RAISE INFO 'id:%',rec.id; sql := 'delete from ' || tablename || ' where id = ''' || rec.id|| ''' and ctid <> (select min(ctid) from ' || tablename || ' where id = ''' || rec.id|| ''')'; execute sql; RAISE INFO 'sql:%',sql; END LOOP; RETURN 1; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; select delete_repeat('t_menu');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。