2013-11-25 11 views
5

वैसे यह अजीब अजीब है, क्या कोई मुझे यह इंगित करने में मदद कर सकता है कि यह कार्य गलत कहां हो सकता है। मैं जब मैं इसे सीधे pgAdmin एसक्यूएल कंसोल में चलाने के लिए, कोई त्रुटि नहीं है लेकिन db-माइग्रेशन-Maven-प्लगइन का उपयोग कर मैं त्रुटि मिलती है एक प्रवास लिपि में इसे चलाने एक समारोहपोस्टग्रेस माइग्रेशन त्रुटि; unterminated डॉलर उद्धृत स्ट्रिंग

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

मैंने सभी कार्यों को एक साथ लिखने से परहेज किया। यह माइग्रेशन सॉफ़्टवेयर (कार्बनफिव) के साथ एक मुद्दा है। मैंने इसे कुछ बदलाव करने के बारे में सोचा क्योंकि यह opensourced है लेकिन समय नहीं मिला है। – ivanorone

+0

मुझे एक्वा डेटा स्टूडियो का उपयोग करके एक समान त्रुटि संदेश मिला, जो रेडशिफ्ट जेडीबीसी ड्राइवर का उपयोग करता है। मेरे मामले में, फिक्स को "विकल्प" और अन-टिक पर जाना था; स्टेटमेंट सेपरेटर '। ऐसा लगता है कि पार्सर ने माना कि पहला अर्धविराम संपूर्ण कार्य परिभाषा का अंत था, और यह अभी तक $$ बंद नहीं हुआ था। आपका उदाहरण फ़ंक्शन मेरे सिस्टम (संस्करण 9.5) पर त्रुटियों के बिना बनाया गया था जब उस बॉक्स को अनचाहे किया गया था। उसके साथ '; वक्तव्य विभाजक 'ticked, मुझे एक ही त्रुटि मिल गई। उम्मीद है कि मदद करता है। – Jason

उत्तर

2

एसक्यूएल अपने माइग्रेशन स्क्रिप्ट द्वारा उत्पन्न शायद उन में $$ उद्धरण है कि कहीं न कहीं एक स्ट्रिंग के रूप में व्याख्या हो जाता है के कुछ प्रकार है।

एक त्वरित और गंदे ठीक $func$ या यहाँ तक कि $check_password$ को $$ बदलने के लिए, हालांकि अन्य कार्यों और नीचे है कि एक ही समस्या से पीड़ित हो सकता है हो सकता है।

बेहतर, अधिक दीर्घकालिक दृष्टिकोण अपराधी $$ का पता लगाने के लिए होगा।

+0

मैंने पहले सोचा था, $$ से $ func $ बदल दिया है, लेकिन फिर भी कभी भी – ivanorone

+0

@ivan_d_coder में मदद नहीं मिली: यह एक ही त्रुटि संदेश या किसी अन्य स्थान पर विफल रहा? –

+0

एक ही स्थान और एक ही त्रुटि :) – ivanorone

2

@ivanorone: डीबी-माइग्रेशन-मेवेन-प्लगइन के लिए दायर एक बग है: https://code.google.com/p/c5-db-migration/issues/detail?id=9 एक पैच शामिल है लेकिन इसके स्रोत को देखते हुए, यह वास्तव में समस्या को ठीक से ठीक नहीं करता है। इसके अलावा, परियोजना निष्क्रिय हो रही है (अंतिम प्रतिबद्ध 2010)।

एक और प्लगइन है, जिसे मैं इसके बजाय उपयोग करने की कोशिश कर रहा हूं, फ्लाईवे: http://flywaydb.org/ इसे स्विच करना बहुत आसान था और यह अब तक ठीक काम करता है। (: Ctrl + F5 सुझाव) .जब मैं Postgres एसक्यूएल (Greenplum इंटरफेस) में आपकी क्वेरी भाग गया मैं समान त्रुटि मिली के रूप में यू ऊपर कहा गया है के लिए 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

मैं मानता हूं, फ्लाईवेडब कार्बन 5 बी-माइग्रेशन-मेवेन-प्लगइन से अधिक सक्रिय प्रतीत होता है। मैंने इसे गंभीरता से नहीं लिया था लेकिन जल्द ही एक नज़र डालेगा – ivanorone

0

समाधान आपकी क्वेरी बैच रूप में निष्पादित करें। मैंने पाया कि डीबी हमारी क्वेरी (सेमीकॉलन) में समाप्ति के आधार पर विभाजित करके क्वेरी निष्पादित कर रहा है। जैसा कि हमने आपकी क्वेरी में तीन बार समाप्त कर दिया है, यह इसे एक कथन द्वारा निष्पादित करता है। तो, इसे अपने निष्पादन विकल्प में एकल बैच के रूप में निष्पादित करने के रूप में पूरे बैच रन के रूप में निष्पादित करने के लिए।

मुझे उम्मीद है कि यह आपकी मदद करेगा :) :)

संबंधित मुद्दे