2012-07-06 20 views
17

से पहले तालिका उपनाम स्वीकार नहीं करेंगे मैं एक फ्रेमवर्क (जोडीडी) का उपयोग कर रहा हूं जो SQL चयन में कॉलम नामों में तालिका उपनाम जोड़ रहा है। यह अच्छी तरह से गठित एसक्यूएल की तरह दिखता है, लेकिन पोस्टग्रेस इस पर चोक करता है।पोस्टग्रेर्स कॉलम नाम

Error: ERROR: column "greeting" of relation "greeting" does not exist 
SQLState: 42703 

वहाँ एक रास्ता Postgres कि SQL स्वीकार करने के लिए प्राप्त करने के लिए है:

update GREETING Greeting 
    set Greeting.ID=5, 
     Greeting.NAME='World', 
     Greeting.PHRASE='Hello World!' 
where (Greeting.ID=5) 

एक त्रुटि देता है? मेरा दूसरा विकल्प ढांचे को हैक करना है, जिसे मैं नहीं करना चाहता हूं।

+1

क्या आपने अलग-अलग कॉलम नाम एलियासिंग मोड (http://jodd.org/doc/db/sqlgenerator.html#Column-name-aliasing) सेट करने का प्रयास किया है? डिफ़ॉल्ट रूप से TABLE_REFERENCE सेट है - जो स्तंभों के लिए तालिका उपनाम जोड़ देगा, लेकिन आप अन्य दो को आजमा सकते हैं। इसे DbOomManager # setDefaultColumnAliasType() विधि द्वारा सेट किया जा सकता है, कहीं भी एप्लिकेशन स्टार्टअप पर। इसके अलावा, असली कोड स्निपेट के साथ जोडर्स से संपर्क करने में संकोच नहीं करें, वे मदद करने के लिए तैयार हैं :) – igr

उत्तर

26

समस्या यह है कि आप कॉलम में SET खंड में तालिका उपनाम शामिल करते हैं। विशेष रूप से स्तंभ भाग के लिए, UPDATE बयान पर

update GREETING Greeting 
set 
    NAME='World', 
    PHRASE='Hello World!' 
where Greeting.ID=5 ; 
3

चेक प्रलेखन:

column

The name of a column in table. The column name can be qualified with a subfield name or array subscript, if needed. Do not include the table's name in the specification of a target column — for example, UPDATE tab SET tab.col = 1 is invalid.

यह Postgres में मान्य है: UPDATE in Postgres docs के दस्तावेज़ देखें यह तालिका के साथ कॉलम उपसर्ग गैर कानूनी है SET खंड में उपनाम।

UPDATE GREETING Greeting 
    SET ID=5, NAME='World', PHRASE='Hello World!' 
WHERE (Greeting.ID=5); 
4

नवीनतम जोड, v3.3.7 का उपयोग करने का प्रयास करें। जहां यह मुद्दा तय किया गया है।

समस्या जोड लाइब्रेरी में थी: इकाई अद्यतन विधियां तालिका उपनामों के साथ अद्यतन कथन उत्पन्न कर रही थीं। नया संस्करण बस टेबल उपनाम नहीं डालता है; जो पोस्टग्रेज़ और अन्य डेटाबेस के लिए भी काम करता है।

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