2013-11-25 5 views
5

글쎄,이게 이상한데,이 함수가 잘못된 부분을 지적 해 줄 사람이 누구든지 내게 도움이 될거야. 나는 내가 pgAdmin의 SQL 콘솔에서 직접 실행하면이 오류없는하지만 난이 오류가 DB 마이그레이션 - 받는다는 - 플러그인을 사용하여 마이그레이션 스크립트를 실행포스트 그레스 이전 오류; 끝나지 않은 달러 인용 문자열

CREATE FUNCTION check_password(uname TEXT, pass TEXT) 
RETURNS BOOLEAN AS $$ 
DECLARE passed BOOLEAN; 
BEGIN 
     SELECT (pwd = $2) INTO passed 
     FROM pwds 
     WHERE username = $1; 

     RETURN passed; 
END; 

$$ LANGUAGE plpgsql 

유사한 기능을 가지고있다.

Error executing: CREATE FUNCTION check_password(uname TEXT, pass TEXT) 
       RETURNS BOOLEAN AS $$ DECLARE passed BOOLEAN 
org.postgresql.util.PSQLException: ERROR: unterminated dollar-quoted 
         string at or near "$$ DECLARE passed BOOLEAN" 
Position: 74 
+0

죄송합니다, 지금 같은 문제에 직면 해 있습니다. 문제를 해결할 방법을 찾았습니까? –

+1

필자는 긴 함수를 모두 작성하는 것을 피했습니다. 마이그레이션 소프트웨어 (carbonfive)와 관련된 문제입니다. 오픈 소스이기 때문에 약간의 변경을가했지만 시간이 없다고 생각했습니다. – ivanorone

+0

Redshift JDBC 드라이버를 사용하는 Aqua Data Studio를 사용하는 유사한 오류 메시지가 나타납니다. 필자의 경우 수정은 "옵션"으로 이동하고 '확인하지 않기'였습니다. 문 분리 기호 '. 파서는 첫 번째 세미콜론이 전체 함수 정의의 끝이라고 가정하고 닫는 $$을 아직 보지 못했습니다. 예제 기능이 시스템에서 오류없이 생성되었습니다 (버전 9.5). 와 더불어 '; Statement Separator '에 똑같은 오류가 있습니다. 도움이 되길 바랍니다. – Jason

답변

2

아마 어딘가에 문자열로 해석됩니다 그들 $$ 따옴표의 일종 마이그레이션 스크립트에 의해 생성 된 SQL.

신속하고 더러운 수정 프로그램은 아래 같은 문제가 고통을 다른 기능이있을 수 있지만, $func$ 또는 $check_password$-$$을 변경할 수 있습니다.

더 나은, 더 장기적인 접근법은 문제가되는 것을 찾아내는 것입니다. $$.

+0

나는 처음에는 $$을 $ func $로 변경했지만 여전히 도움이되지는 않는다고 생각했습니다. – ivanorone

+0

@ivan_d_coder : 정확히 동일한 오류 메시지 또는 다른 위치에서 실패 했습니까? –

+0

같은 위치와 같은 오류 :) – ivanorone

2

@ivanorone : db-migration-maven-plugin에 대한 버그가 있습니다. https://code.google.com/p/c5-db-migration/issues/detail?id=9 패치가 포함되어 있지만 소스를 보면 실제로 문제를 제대로 수정하지 않습니다. 게다가, 프로젝트는 공회전중인 것으로 보인다 (2010 년 마지막 커밋).

다른 플러그인이 있는데, 대신 사용하려고합니다. 이동 경로 : http://flywaydb.org/ 전환하는 것은 매우 쉽고 지금까지는 잘 작동합니다. u는 위에서 언급 한 바와 같이 나는 비슷한 오류가 발생했습니다 내가 포스트 그레스 SQL (그린 플럼 인터페이스)에 쿼리를 실행 .When : (사용 CTRL + F5 힌트) Grails Database Migration Plugin

changeSet(author: "...", id: "...") { 
    sql(splitStatements: false, ''' 
     CREATE FUNCTION trigger_func() RETURNS TRIGGER AS $$ 
     DECLARE var text; 
     BEGIN 
     ... 
     END $$ LANGUAGE plpgsql; 
    ''') 
} 
+1

나는 동의한다, flywaydb는 carbon5 b-migration-maven-plugin보다 더 활동적인 것처럼 보인다. 나는 그것을 심각하게 생각하지 않았지만 곧 보게 될 것이다. – ivanorone

0

솔루션은 하나의 일괄 처리로 쿼리를 실행합니다. db가 쿼리 (Semicolon)의 종료를 기준으로 분할하여 쿼리를 실행하고 있음을 발견했습니다. 우리가 당신의 쿼리에서 3 번 종료 했으므로 하나씩 성명을 실행합니다. 따라서 실행 옵션에서 단일 배치로 실행을 사용하여 전체 배치를 실행합니다.

나는 그것이 당신을 돕기를 바랍니다 :) :)