0
私は次のコードを持っている:- plpgsqlが
DO $$
BEGIN
CREATE TABLE IF NOT EXISTS widget_changes (
change_id integer NOT NULL,
change_date date NOT NULL default CURRENT_DATE,
change_file character varying(255),
description character varying(255)
);
IF NOT EXISTS (SELECT 0 FROM pg_class where relname = 'widget_changes_change_id_seq')
THEN
CREATE SEQUENCE widget_changes_change_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
USING local;
ALTER TABLE ONLY widget_changes ALTER COLUMN change_id SET DEFAULT nextval('widget_changes_change_id_seq'::regclass);
INSERT INTO widget_changes VALUES (DEFAULT,DEFAULT, 'test.sql', 'test description');
END IF;
END
$$
を私はそれが成功だとき、それはOKを返すように、このコードを変更したいと思います。失敗があれば、私は「偽」または他の一言を欲しい。
今私は、コマンドラインを通じて初めてから実行したときに、それが返されます。
testbox:/tmp/ss# psql -U postgres -d widgets -f test.sql
DO
をそして私は再びそれを実行するときに、それが返されます。
psql:test.sql:26: NOTICE: relation "widget_changes" already exists, skipping
CONTEXT: SQL statement "CREATE TABLE IF NOT EXISTS widget_changes (
change_id integer NOT NULL,
change_date date NOT NULL default CURRENT_DATE,
change_file character varying(255),
description character varying(255)
)"
PL/pgSQL function inline_code_block line 3 at SQL statement
DO
それがどのように見えます"EXISTS"条件を正常にテストしていますが、すべての冗長性を防ぎ、OK/FAILタイプのものを返す必要があります。 ヒントをいただければ幸いです。