2013-11-25 113 views
5

これは奇妙なことですが、誰かがこの機能が間違っているかもしれないと指摘してくれます。 は私がpostgresの移行エラー。終わりのない引用符付きの文字列

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 

と同様の機能を持っている私はpgAdminでのSQLコンソールで直接それを実行すると、エラーがないが、私はエラーを取得DB-移行のmaven-プラグインを使用して移行スクリプトでそれを実行しています。

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)で、そのボックスがチェックされていない場合、あなたのサンプル関数はエラーなしで作成されました。とともに ';私は同じエラーが発生しました。 希望に役立ちます。 – 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は前述したように、私は似エラーを得た私はPostgresのSQL(Greenplumはインタフェース)でクエリを実行した.When:(USEの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がクエリ(セミコロン)の終了に基づいてそれを分割してクエリを実行していることがわかりました。クエリで3回終了したので、1つずつステートメントを実行します。したがって、実行オプションで1回のバッチとして実行を使用して、バッチ全体を実行することができます。

私はそれがあなたを助けてくれることを願っています:) :)

関連する問題