我在.sql文件中有以下sql代码:
CREATE TABLE IF NOT EXISTS changes (
change_id integer NOT NULL,
change_date date NOT NULL default CURRENT_DATE,
change_file character varying(255),
description character varying(255)
);
CREATE SEQUENCE changes_change_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
USING local;
ALTER TABLE ONLY changes ALTER COLUMN change_id SET DEFAULT nextval('changes_change_id_seq'::regclass);
INSERT INTO changes VALUES (DEFAULT,DEFAULT, 'temp.sql', 'test');
我需要使这个脚本具有幂等性。我需要能够多次运行它而不会失败。
现在,当我多次运行它时失败了:
lab:/tmp# psql -U postgres -d widgets -f changes.sql
psql:changes.sql:7: NOTICE: relation "changes" already exists, skipping
CREATE TABLE
psql:chanegs.sql:15: ERROR: relation "changes_change_id_seq" already exists
ALTER TABLE
INSERT 0 1
如何修改CREATE SEQUENCE和ALTER TABLE语句,只有在序列不存在的情况下才会运行?
我已经尝试了序列中的“IF NOT EXISTS”,但它已经爆炸了。