बैश स्क्रिप्ट में postgresql फ़ंक्शन का उपयोग नहीं कर सकता

मैं postgresql के लिए नया हूं और मैं postgresql 9.3 और postgis 2.1 का उपयोग कर रहा हूँ।

Pgadmin में, मैं डेटाबेस "AddGeometryColumn" में एक फ़ंक्शन का उपयोग करने में सक्षम हूं, लेकिन जब मैं उबंटू बैश में उस स्क्रिप्ट को लिखता हूं, तो यह काम नहीं करता है। मुझे मिली त्रुटि है

ERROR:  function addgeometrycolumn(unknown, unknown, unknown, unknown, unknown, integer) does not exist
LINE 1: SELECT AddGeometryColumn('tiger_staging','al_place','the_geo...
           ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

क्या किसी के पास समान अनुभव है?

पोस्टग्रेस्क्ल में आप "उपयोग" डेटाबेस को कैसे निर्दिष्ट करते हैं? डेटाबेस स्विच करने के लिए MySQL "mydatabase का उपयोग करें" में एक क्वेरी की तरह?

0
कोड पोस्ट 2.1 में tiger_geocoder से उत्पन्न होता है, इसलिए यह टाइगर डेटाबेस लोड करने के लिए उपयोग किए जाने वाले सभी के समान होना चाहिए।
जोड़ा लेखक Suanmeiguo, स्रोत
कृपया कोड को पोस्ट करें जो त्रुटि देता है
जोड़ा लेखक Luis Muñoz, स्रोत

3 उत्तर

मुझे लगता है कि आप "psql" का उपयोग कर रहे हैं, तो बस इस तरह करें:

psql [databasename] -U [username] -t -e --command="select [function]"

जैसा कि "संकेत" कहता है, आपको अपने पैरामीटर मानों को अपने फ़ंक्शन के पैरामीटर के समान प्रकार के साथ डालना होगा:

psql [databasename] -U [username] -t -e --command="SELECT AddGeometryColumn(cast('tiger_staging' as character varying),..."

यह भी जांचें कि आपके चयन में पैरा की संख्या आपके फ़ंक्शन के पैरामीटर से मेल खाती है या नहीं।

1
जोड़ा

आप शायद उस डेटाबेस से जुड़े हुए हैं जिसमें PostGIS एक्सटेंशन स्थापित नहीं है (उदा। डिफ़ॉल्ट postgres डेटाबेस)। psql (कमांड-लाइन क्लाइंट) में, जांचें कि = # प्रॉम्प्ट से पहले आने वाला नाम उस डेटाबेस से मेल खाता है जिसका आप उपयोग करना चाहते हैं:

postgres=#

किसी अन्य डेटाबेस पर स्विच करने के लिए, \ c कमांड का उपयोग करें:

postgres=# \c mydatabase

...     mydatabase = #

यह जांचने के लिए कि आपके वर्तमान डीबी में पोस्टजीआईएस एक्सटेंशन सही ढंग से स्थापित है, postgis_full_version() फ़ंक्शन का उपयोग करें:

SELECT postgis_full_version();

यदि एक्सटेंशन सक्षम है तो इसे पोस्टजीआईएस संस्करण पर जानकारी वापस करनी चाहिए। अगर आपको कोई फ़ंक्शन दिए गए नाम और तर्क प्रकारों से मेल नहीं खाता त्रुटि मिलती है, तो आपको अपने वर्तमान डीबी में एक्सटेंशन इंस्टॉल करना होगा:

CREATE EXTENSION postgis;

ध्यान दें कि डेटाबेस में एक्सटेंशन को सक्षम करने में सक्षम होने के लिए PostGIS पैकेज को स्थापित करना होगा।

1
जोड़ा

आप CaMeL केस नाम पर जा रहे हैं।

पहचानकर्ता (जैसे AddGeometryColumn ) को कम केस ( addgeometrycolumn ) तक जोड़ा जाता है जब तक कि डबल-उद्धृत ( "AddGeometryColumn" ) । मैन्युअल में विवरण।
दुर्भाग्यवश, पोस्टजीस फ़ंक्शन एक नामकरण सम्मेलन का पालन करते हैं जिसके लिए हर समय डबल-कोटिंग की आवश्यकता होती है।

For your bash-invocation, you probably need to use single quotes around your string to remove the special meaning of double-quotes. Or escape with backslash (\").

जहां भी मैं कानूनी रूप से, कम-केस नामों को विशेष रूप से सभी पहचानकर्ताओं के लिए एक जैसे हाथों की समस्याओं को रोकने के लिए चिपक सकता हूं।

0
जोड़ा
अधिकांश पोस्टजीआईएस कार्यों को ऊंट के मामले के रूप में दस्तावेज किया जाता है, लेकिन कम केस नाम के रूप में काम करते हैं। कुछ लोगों को इस शैली में फिट करने के लिए भी नाम दिया गया था, उदा। ST_Line_Locate_Point का हाल ही में नाम बदल दिया गया था ST_LineLocatePoint
जोड़ा लेखक Mike T, स्रोत
मैं आम तौर पर सेने नामों का उपयोग करने के लिए सहमत हूं। ओजीसी और एसक्यूएल/एमएम मानकों में शुरू होने वाले अधिकांश स्थानिक डेटाबेस द्वारा उपयोग किए जाने वाले "ST_CamelCase" सम्मेलन।
जोड़ा लेखक Mike T, स्रोत
@MikeToews: ठीक है, मैं ऊपर की तरह बेताब प्रश्न देख रहा हूं जो मेरी स्थायी सलाह को मजबूत करता है: केवल कानूनी, निचले केस पहचानकर्ता का उपयोग करें जिन्हें डबल-कोट नहीं किया जाना चाहिए और स्वयं को कुछ सिरदर्द बचाएं। PostGis लोगों के पास शायद उनके कारण हैं। शायद कुछ भू-डेटा क्रॉस-प्लेटफार्म अनुपालन? यदि मैं इससे बच सकता हूं तो मैं कभी भी CaMeL केस नामों का उपयोग नहीं करता हूं। मैंने जवाब स्पष्ट किया: उपयोग करने के लिए कानूनी, लेकिन मेरी सलाह उनसे बचने के लिए है।
जोड़ा लेखक Erwin Brandstetter, स्रोत