如何检查序列是否已经存在?

时间:2016-12-23 23:02:13

标签: sql postgresql ddl

我在.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”,但它已经爆炸了。

0 个答案:

没有答案