CREATE OR REPLACE FUNCTION "public"."add_sequence_to_table"("p_table_name" text, "p_column_name" text) RETURNS "pg_catalog"."void" AS $BODY$ DECLARE max_value INTEGER; sequence_name text; BEGIN -- 获取表的最大值 EXECUTE format('SELECT COALESCE(MAX(%I), 0) FROM %I', p_column_name, p_table_name) INTO max_value; -- 检查是否已经存在同名的序列 SELECT relname INTO sequence_name FROM pg_class WHERE relname = p_table_name || '_' || p_column_name || '_seq'; IF sequence_name IS NULL THEN -- 创建序列 EXECUTE format('CREATE SEQUENCE %I', p_table_name || '_' || p_column_name || '_seq'); -- 将序列的起始值设置为当前表的最大值 EXECUTE format('ALTER SEQUENCE %I RESTART WITH %s', p_table_name || '_' || p_column_name || '_seq', (max_value + 1)); -- 修改列的默认值为序列的下一个值 EXECUTE format('ALTER TABLE %I ALTER COLUMN %I SET DEFAULT nextval(%L)', p_table_name, p_column_name, p_table_name || '_' || p_column_name || '_seq'); RAISE NOTICE '成功将自增序列添加到表 % 的列 %,当前值已设置为 %', p_table_name, p_column_name, (max_value + 1); ELSE RAISE NOTICE '表 % 的列 % 已存在同名的序列', p_table_name, p_column_name; END IF; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100
标签:EXECUTE,name,column,值为,增列,--,序列,table From: https://www.cnblogs.com/tangchun/p/17738037.html