2014-02-26 6 views
0

Greenplum 데이터베이스 (PostgreSQL 포크)는 아래의 DO 문을 실행하려고 할 때마다 오류가 발생합니다. 특히 ERROR : "DO"또는 그 근처에서 구문 오류가 발생했습니다. 왜 이런거야? PostgreSQL 8.2.15를 기반으로 Greenplum (버전?)을 실행하고 있습니다.Greenplum에서 DO가있는 익명 코드 블록을 실행할 수 없습니다.

DO LANGUAGE plpgsql $$ 
     BEGIN 
      IF (SELECT COUNT(*) FROM test) > 1 THEN 
       CREATE TABLE test2 AS SELECT * FROM test 
      END IF; 
     END; 
$$; 

기능으로 실행하면 잘 작동합니다.

CREATE OR REPLACE FUNCTION test_maker() 
RETURNS void AS 
$_$ 
BEGIN 
      IF (SELECT COUNT(*) FROM test) > 1 THEN 
        CREATE TABLE test2 AS SELECT * FROM test; 
      END IF; 
END $_$ LANGUAGE plpgsql; 

SELECT test_maker(); 
+3

익명 코드 블록은 [V9.0] (HT에 첫 출연 조인 (다시, 다시 일시적으로해야하는 경우 변경할 수 있습니다) tp : //www.postgresql.org/docs/current/static/release-9-0.html#AEN124353). –

답변

1

업데이트 : 당신은 모든 PostgreSQL을 사용하지 않을. Greenplum 데이터베이스를 사용 중입니다. 오래된 PostgreSQL의 크게 수정 된 버전을 기반으로 한 데이터베이스 제품입니다. 그것은 PostgreSQL이 아닙니다. Drizzle이나 Percona를 사용할 때 "MySQL을 사용하고 있습니다"라고 말하는 것과 비슷하지만 훨씬 더 다릅니다. Greenplum을 사용하는 경우, "PostgreSQL"이라고 지칭하지 마십시오.

Greenplum 데이터베이스를 사용하는 경우 내 조언은 의미가 없습니다. 실제로 말한 것처럼 PostgreSQL 8.2.15를 실제로 사용하지 않기 때문에 Greenplum 데이터베이스 버전을 사용하고 있습니다 (8.2.15 참조). 프로토콜 수준에서 (나는 격렬하게 좌절감을 느낀다.)


Why is this? I'm running PostgreSQL 8.2.15

사용하지 꽤 선사 시대 인 PostgreSQL의 버전. Milen이 지적한대로, DO 블록이 9.0에 추가되었습니다.

일반적으로 PostgreSQL의 SQL 구문 분석기에서 인식하지 못하는 기능, 인식되지 않는 기능 등이있을 때마다 고대 버전을 실행할 때 처음 생각한 것이 " 8.2 매뉴얼을보고 거기 있는지 확인하십시오. "

어쨌든 정말로 업그레이드해야합니다. 즉시에서 8.2.23으로 업그레이드하십시오. 너는 심각한 수정을 놓치고있어. 그런 다음 업그레이드를 8.4 또는 그 이상으로, 바람직하게는 곧장 9.3으로 업그레이드하십시오. (설정을 당신이 BYTEA를 사용하는 경우 클라이언트 드라이버를 업데이트하거나 변경) 8.3

  • bytea_output 기본 변경의 텍스트에 암시 적 캐스트의

    • 제거 : 당신은에 의한 응용 프로그램 호환성 문제를 처리해야합니다
    • standard_conforming_strings 기본 변화는 암시에 대한 이전 버전의 compat 지원
    • 제거는
  • +0

    감사합니다. 나는 이것이 사실인지 궁금해했지만 DO 블록이 도입되었을 때 문서를 찾을 수 없었습니다. 업그레이드하고 싶다. 여러 번이 효과를 주장했지만, 내 결정이 아니었다. 내 지식에 따르면, 이것은 greenplum이 실행되는 포스트그레스의 최신 버전이다. –