我正在做一個函數,它將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