如何控制postgres脚本执行

时间:2015-01-16 15:26:30

标签: versioning postgresql-9.1

我有一个脚本,我只需将其粘贴到POSTGRES 9.1中的SQL查询窗口并运行。

例如          - 开始脚本          - 第1部分

    DO
    $$
    BEGIN
    CREATE SEQUENCE base_listing_id_seq
      INCREMENT 1
      MINVALUE 1
      MAXVALUE 9223372036854775807
      START 1
      CACHE 1;
    ALTER TABLE base_listing_id_seq
      OWNER TO postgres;
    EXCEPTION
        WHEN duplicate_table THEN RAISE NOTICE 'sequence base_listing_id_seq already exists';
    END
    $$ LANGUAGE plpgsql;

    -- Part 2

    CREATE TABLE IF NOT EXISTS aes_fba_details
    (
      id serial NOT NULL,
      product_id integer NOT NULL,
      shippingprice numeric DEFAULT 0,
      fbadatetime date NOT NULL,
      currency text,
      CONSTRAINT aes_fba_details_pkey PRIMARY KEY (id)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE aes_fba_details
      OWNER TO postgres;

    -- End Scripts

我想要做的是根据从表中读入的值(如果你喜欢的版本字符串)运行第1部分或第2部分。

例如

    myVariable = SELECT version-string FROM versionTable;

    ... 
    DO PART 1
    ...

    If myVariable > 1 then
        ...
        DO PART 2
        ...
    End if

这甚至可能吗?如果我把术语搞混了,我会提前道歉。

1 个答案:

答案 0 :(得分:1)

这是可能的,但您需要在使用DO条件的大IF块中执行所有DDL,以决定要做什么。

您不能在纯SQL中使用变量或IF语句,只能在PL / PgSQL中使用。