我正在做一个函数,它将ID列添加到给定的表,创建一个序列并填充新的列值。问题在于该列已创建,但现在我需要使用创建的序列(1,2,3,4,5 ...)的nextval()
填充它。我不知道如何在添加列句中指定。改变表添加列的默认值,并执行每行的默认值
CREATE OR REPLACE FUNCTION create_id(tabla character varying)
RETURNS void AS
$BODY$
DECLARE
BEGIN
IF NOT EXISTS (SELECT information_schema.columns.column_name FROM information_schema.columns WHERE information_schema.columns.table_name=tabla AND information_schema.columns.column_name='id')
THEN
EXECUTE 'ALTER TABLE '|| tabla ||' ADD COLUMN id numeric(8,0)';
IF NOT EXISTS (SELECT relname FROM pg_class WHERE relname='seq_id_'||tabla)
THEN
EXECUTE 'CREATE SEQUENCE seq_id_'||tabla||' INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1';
EXECUTE 'GRANT ALL ON TABLE seq_id_'||tabla||' TO postgres';
EXECUTE 'ALTER TABLE ONLY '||tabla||' ALTER COLUMN id SET DEFAULT nextval(''seq_id_'||tabla||'''::regclass)';
END IF;
END IF;
RETURN;
END;
$BODY$
LANGUAGE plpgsql;
您需要更新新的'id'柱,一次用nextval加油吧?按什么标准排序? – keltar
按无标准排序,第一个记录的第一个值,第二个记录的第二个值,第三个记录的第三个值.. – Egidi
如果没有排序条件,则没有“第一个”和“第二个”字...无序的选择可能会返回值以任何顺序它更喜欢。 – keltar