2015-01-16 4 views
0

POSTGRES 9.1에서 SQL 쿼리 창에 붙여 넣기 만하면되는 스크립트가 있습니다.postgres 스크립트 실행을 제어하는 ​​방법

예를 들어 - 시작 스크립트 - 제 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

가능한 일이지만 수행 할 작업을 결정하기 위해 IF 조건을 사용하는 큰 DO 블록 내에서 모든 DDL을 수행해야합니다.

PL/PgSQL에서만 일반 SQL에서 변수 또는 IF 문을 사용할 수 없습니다.

+0

감사합니다. 한 가지 큰 일은 나와 잘 맞습니다. 달성하고자하는 것에 대한 개요를 도울 수 있습니까? – err1

+0

@ Sai-LeungLee 내가 필요한 것을 정말로 모른다. 원하는 코드를 거의 작성했습니다. 당신은 PL/PgSQL의'DO' 블록을 사용하는 방법을 알고 있습니다. 적절한 'IF ... THEN' 조건을 사용하여'DO '블록으로 감싸십시오. IF 문을 사용하는 방법은 PL/PgSQL 제어 구조 매뉴얼을 참조하십시오. –

+0

고마워요.하지만 SQL 문에서 반환 된 데이터로 변수를 초기화하는 방법에 대해 조금 확신하지 못합니다. myVariable = SELECT version-string from versionTable; 이 비트가 작동되면 스크립트를 해킹 할 수있을 것이라고 확신합니다. 나는 코드의 DO 비트 (Google 검색에서 함께 자갈을 댈 수 있었던 것 이외에)에 관해서도 잘 아는 사람이다. SQL과 함수들 (한 지점까지) 그렇지만 모두 묶는 방법에 대해서는 혼란 스럽다. – err1

관련 문제