7

प्ले फ्रेमवर्क 2.1प्ले फ्रेमवर्क में विकास का उपयोग करके मैं PostgreSQL में फ़ंक्शन कैसे बना सकता हूं?

मैं निम्नलिखित एसक्यूएल मेरी विकास में परिभाषित किया है के साथ:

We got the following error: ERROR: unterminated dollar-quoted string at or near 
"$$ SELECT i FROM (SELECT generate_series(array_lower(myArray,1), 
array_upper(myArray,1))) g(i) WHERE myArray[i] = anyElement LIMIT 1" Position: 
87 [ERROR:0, SQLSTATE:42601], while trying to run this SQL script: 

मैं:

CREATE OR REPLACE FUNCTION idx(myArray anyarray, myElement anyelement) RETURNS int AS $$ 
SELECT i FROM (
    SELECT generate_series(array_lower(myArray,1),array_upper(myArray,1)) 
) g(i) 
WHERE myArray[i] = anyElement 
LIMIT 1; $$ LANGUAGE sql IMMUTABLE; 

जब मैं विकास पर अमल, मैं निम्नलिखित त्रुटि मिलती है मैं PostgreSQL ड्राइवर संस्करण 9.1-901.jdbc4 का उपयोग कर रहा हूँ।

मैं Postgres क्वेरी लॉग को देखा और पता चला कि प्ले निम्न करने के लिए कोशिश कर रहा है:

LOG: execute <unnamed>: insert into play_evolutions values($1, $2, $3, $4, $5, $6, $7) 
PST DETAIL: parameters: $1 = '1', 
         $2 = 'c834d463ebd9916b0a3388040300a0926514faef', 
         $3 = '2013-03-05 00:00:00', 
         $4 = '-- THE EVOLUTION UP STATEMENTS GO HERE', 
         $5 = '-- THE EVOLUTION DOWN STATEMENTS GO HERE', 
         $6 = 'applying_up', 
         $7 = '' 

तो, के लिए किसी कारण प्ले ठीक से बचने के बिना एक पाठ स्तंभ में एसक्यूएल सम्मिलित करने के लिए कोशिश कर रहा है। क्या किसी और के लिए इसके आसपास एक काम मिला है? क्या आपको लगता है कि यह एक जेडीबीसी समस्या है और प्ले समस्या नहीं है? इसके अलावा, क्या किसी ने प्ले 2.1 के साथ काम कर रहे लिक्विबेस को मिला है?

इसके अलावा, बस के लिए $$ बदलते 'या तो काम नहीं करता। उस स्थिति में हमें एक अलग त्रुटि मिलती है, लेकिन हम अभी भी विकास को निष्पादित नहीं कर सकते हैं।

संपादित करें: मैं एक नया नाटक परियोजना से एक उदाहरण जोड़ा जोड़ दिया है। कृपया यहां डाउनलोड करें: http://elijah.zupancic.name/files/play_evolution_problem.tar.gz

उदाहरण काम करने के लिए आपको विकास 1 एसक्यूएल पर पहली टिप्पणी में दिखाए गए अनुसार एक नया डेटाबेस बनाना होगा। फिर आपको सही बंदरगाह पर और सही उपयोगकर्ता के साथ पोस्टग्रेस से कनेक्ट करने के लिए अपने conf/application.conf को कॉन्फ़िगर करने की आवश्यकता होगी।

मैं सिर्फ एक प्रयोग मैं पूरी तरह खेलने ढांचे के बाहर समारोह बनाने एसक्यूएल सम्मिलित करने का प्रयास किया था गए हैं। उदाहरण यहां है: http://elijah.zupancic.name/files/PgCreateFunction.tar.gz <

यह पता चला है कि यह बहुत प्रतिलिपिबद्ध है।

संपादित करें: ऐसा लगता है कि मैं इसे जावा में पुन: पेश नहीं कर सकते।

+0

जो आप देख रहे हैं वह पीजी से आउटपुट पैरामीटरयुक्त क्वेरी और उसके तर्क दिखा रहा है। प्रत्येक परम को fe/प्रोटोकॉल पर अलग से भेजा जाता है और क्लाइंट द्वारा भागने की आवश्यकता नहीं होती है। जो मुद्दा आप यहां देखते हैं वह निश्चित रूप से केवल '' '' का उपयोग करते हुए पैरामीटर के पीजी के डीबग प्रतिनिधित्व के साथ ही है; वास्तविक परम ठीक होगा। यदि यह भागने में असफल रहा, तो आप इसके बजाय प्रतिस्थापित सभी पैरामीटर के साथ एक बड़ी SQL क्वेरी देखेंगे। –

+0

ऐसा लगता है कि आप बहुस्तरीय अलगाव के दौरान डॉलर उद्धरणों के विश्लेषण के साथ एक पीजीजेडीबीसी मुद्दे का सामना कर रहे हैं। एक आत्मनिर्भर संकलन योग्य उदाहरण उपयोगी होगा। http://sscce.org/। यदि आप किसी संपादन में विवरण जोड़ते हैं, तो कृपया यहां टिप्पणी करें ताकि मुझे अधिसूचित किया जा सके। –

+0

हाय क्रेग, मैंने अनुरोध किया है कि मैंने एसएससीसीई को जोड़ा है। एक नज़र डालेंयह सबसे सरल प्ले सेटअप में पुन: पेश करता है जिसे मैं बना सकता हूं। – Elijah

उत्तर

18

यह कैसे खेलने के विकास ने पार्स करता है की एक विरूपण साक्ष्य है। चूंकि यह अर्धविरामों पर प्रत्येक कथन का विश्लेषण करता है, यह संग्रहीत प्रक्रिया परिभाषाओं को संभाल नहीं सकता है। समस्या को 2.1 2.1 में संबोधित किया गया है जिससे आप उन्हें दोगुनी करके एम्बेडेड अर्धविराम निर्दिष्ट कर सकते हैं। उदाहरण के लिए https://github.com/playframework/Play20/pull/649 देखें।

का उपयोग ;; मेरे लिए एक समान समस्या हल, खेलने के लिए 2.1 का उपयोग कर। मैं सुझाव दूंगा कि आप अपने विकास को निम्नानुसार परिभाषित करें, और पुनः प्रयास करें:

CREATE OR REPLACE FUNCTION idx(myArray anyarray, myElement anyelement) RETURNS int AS $$ 
SELECT i FROM (
    SELECT generate_series(array_lower(myArray,1),array_upper(myArray,1)) 
) g(i) 
WHERE myArray[i] = anyElement 
LIMIT 1;; $$ LANGUAGE sql IMMUTABLE; 
संबंधित मुद्दे

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