PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

त्रुटि:"$libdir/plpython2" फ़ाइल तक नहीं पहुंच सका - त्रुटि:फ़ाइल "$libdir/plpython3" तक नहीं पहुंच सका

उपरोक्त त्रुटि PG मेलिंग पर वर्णित है क्योंकि यह PG9.3Beta पर भाषा plpython2u/plpython3u बनाने में विफल रहती है।

Error:
postgres=# create language plpython3u;
ERROR: could not access file "$libdir/plpython3": No such file or directory

postgres=# create language plpython2u;
ERROR: could not access file "$libdir/plpython2": No such file or directory

उपरोक्त त्रुटियों पर कुछ अध्ययन करने से पहले मैंने पीजी दस्तावेज़ीकरण लिंक के नीचे पढ़ा कि कैसे PostgreSQL लैंगेज प्लापीथॉन बनाने की अनुमति देता है और उन्हें कैसे कॉन्फ़िगर किया जाना चाहिए।

http://www.postgresql.org/docs/9.3/static/plpython-python23.html

उपरोक्त लिंक से यह स्पष्ट है कि आपको बाइनरी को दो बार संकलित करने की आवश्यकता है यदि आपको plpython2u और plpython3u दोनों की आवश्यकता है। AFAIK, plpython2u के लिए ActivePython 2.7.x और plpython3u के लिए 3.2.x को बिना किसी कठिनाई के PG 9.2.x पर कॉन्फ़िगर किया जा सकता है, लेकिन मैंने कभी भी PG 9.3Beta2 पर प्रयास नहीं किया। इसलिए, इसे क्यों और कैसे ठीक किया जा सकता है, इसके बारे में त्रुटि का विश्लेषण करने और विश्लेषण करने के लिए माना जाता है, मैंने सबसे पहले, ActivePython 3.2 के साथ आधार पथ सेट करके स्रोत स्थापना शुरू की। (ActivePython डाउनलोड लिंक http://www.activestate.com/activepython/downloads)

[root@localhost postgresql-9.3beta1]# export PATH=/opt/ActivePython-3.2/bin:$PATH
[root@localhost postgresql-9.3beta1]# ./configure --prefix=/usr/local/pg93b --with-python

संकलन विफल हो गया है और Config.log फ़ाइल में त्रुटि इस रूप में दिखाई गई है:

make[3]: Entering directory `/usr/local/src/postgresql-9.3beta1/src/pl/plpython'
*** Cannot build PL/Python because libpython is not a shared library.
*** You might have to rebuild your Python installation. Refer to
make[3]: Leaving directory `/usr/local/src/postgresql-9.3beta1/src/pl/plpython'

पीजी प्रलेखन में उपरोक्त त्रुटि पर हमारे पास स्पष्ट निर्देश हैं और ऐसा क्यों होता है, प्लापीथॉन अधिकांश प्लेटफार्मों पर एक साझा पुस्तकालय होगा, लेकिन कुछ प्लेटफार्मों पर हमें विशेष रूप से संकलक को साझा पुस्तकालय से अजगर के रूप में मजबूर करने की आवश्यकता होती है। उसके लिए या तो आप परिवर्तनों के लिए /src/pl/python/Makefile पर आगे बढ़ सकते हैं या संकलन करते समय विशेष रूप से "shared_libpython=yes" बता सकते हैं।

स्रोत संकलन दो फाइलों के लिए जांच करता है जब आप "पायथन" और "पायथन-कॉन्फ़िगरेशन" के साथ-साथ-पायथन का उपयोग करते हैं। हालांकि मेरे पास मेरे बेस पथ में ActivePython-3.2 है, फिर भी कंपाइलर उन्हें "पायथन" और "पायथन-कॉनिफग" खोजने में विफल रहता है

[root@localhost postgresql-9.3beta1]# which python
/usr/local/bin/python
[root@localhost postgresql-9.3beta1]# which python-config
/usr/local/bin/python-config

इसका कारण यह है कि, ActivePython 3.2 में फ़ाइल नाम "पायथन" के रूप में "पायथन 3" और "पायथन-कॉन्फ़िगरेशन" के रूप में "पायथन 3-कॉन्फ़िगरेशन" के रूप में होंगे, इसलिए कंपाइलर ने नए के बजाय पुराने को इंगित किया। इस समय, आसिफ नईम (आपकी अंतर्दृष्टि के लिए धन्यवाद) हमारे मूल देव से। टीम ने मुझे मौजूदा ActivePython-3.2 फ़ाइलों को पायथन और पायथन-कॉन्फ़िगरेशन के रूप में नकल करने के लिए सूचित किया। यह लगभग उसकी ओर से एक हैक की तरह है, इसलिए मैंने उन फाइलों को इस रूप में दोहराया:

cd /opt/ActivePython-3.2/bin
cp python3-config python-config
cp python3 python

ठीक है, अब मैं इसे अपने आधार पथ में देख सकता हूँ।

[root@localhost postgresql-9.3beta1]# export PATH=/opt/ActivePython-3.2/bin:$PATH
[root@localhost postgresql-9.3beta1]# which python
/opt/ActivePython-3.2/bin/python
[root@localhost postgresql-9.3beta1]# which python-config
/opt/ActivePython-3.2/bin/python-config

मैंने परिवर्तनों के बाद -with-python का उपयोग करके PG स्रोत को फिर से संकलित किया और संकलक को "shared_libpython" का उपयोग करके SHARED_LIBPYTHON को चुनने के लिए मजबूर किया।

./configure --prefix=/usr/local/pg93b3 --with-python
make shared_libpython=yes
make shared_libpython=yes install

ये चरण PG9.3Beta को ActivePython-3.2 पुस्तकालयों के साथ प्रभावी रूप से संकलित करेंगे। अब भाषा बनाते हैं plpython3u:

-bash-4.1$ psql -p 4444
psql (9.3beta1)
Type "help" for help.

postgres=# create language plpython3u;
The connection to the server was lost. Attempting reset: Failed.
!>
!>

ओह, यह अजीब है, यह अब क्यों दुर्घटनाग्रस्त हो गया है .. इस तरह की स्थिति में $PGDATA/pg_log इस मुद्दे के बारे में जानकारी के लिए आपके मित्र हैं। क्रैश के बारे में डेटाबेस सर्वर लॉग जानकारी यहां दी गई है:

2013-07-13 22:08:37 IST-31208-postgres-postgres :LOG: statement: create language plpython3u;
Could not find platform independent libraries
Could not find platform dependent libraries
Consider setting $PYTHONHOME to [:]
Fatal Python error: Py_Initialize: Unable to get the locale encoding

ठीक है। मैं अजगर पथ सेट करने से चूक गया, यह बहुत महत्वपूर्ण है जब आप अपने डेटाबेस पर अजगर या पर्ल भाषाओं के साथ काम कर रहे हैं।
मैंने क्लस्टर शुरू करने से पहले PYTHONHOME, PYTHONPATH और LD_LIBRARY_PATH सेट किया है।

export PYTHONHOME=/opt/ActivePython-3.2/
export PYTHONPATH=/opt/ActivePython-3.2/bin:$PATH
export LD_LIBRARY_PATH=/opt/ActivePython-3.2/lib:$LD_LIBRARY_PATH

/usr/local/pg93b3/bin/pg_ctl -D /usr/local/pg93b3/data/ start

-bash-4.1$ psql -p 4444
psql (9.3beta1)

Type "help" for help.

postgres=# create language plpython3u;
CREATE LANGUAGE

अच्छा...इसने ActivePython-3.2 के साथ plpython3u बनाया है।

यदि आप plpython2u भी उसी इंस्टालेशन पर चाहते हैं। जैसा कि हमने ActivePython-3.2 के लिए किया था, उसमें बदलाव न करें, बस ActivePython-2.7 की एक प्रति लें और इसे आधार पथ में सेट करें और स्रोत को फिर से संकलित करें।

export PATH=/opt/ActivePython-2.7/bin:$PATH
./configure --prefix=/usr/local/pg93b2 --with-python
make shared_libpython=yes
make shared_libpython=yes install


export PYTHONHOME=/opt/ActivePython-2.7/
export PYTHONPATH=/opt/ActivePython-2.7/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pg93b2/lib
export LD_LIBRARY_PATH=/opt/ActivePython-2.7/lib:$LD_LIBRARY_PATH

-bash-4.1$ ./psql -p 4444
psql (9.3beta2)
Type "help" for help.

postgres=#
postgres=# create language plpython2u;
CREATE LANGUAGE

टिप्पणियों और सुधारों का स्वागत है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जटिल पोस्टग्रेज क्वेरी

  2. स्प्रिंग + हाइबरनेट:क्वेरी प्लान कैश मेमोरी उपयोग

  3. प्राग PostgreSQL डेवलपर दिवस 2016

  4. विभिन्न चयन प्रश्नों के आउटपुट को वापस करने के लिए पीएल/पीजीएसक्यूएल फ़ंक्शन को दोबारा दोहराएं

  5. सम्मिलित तालिका से चयन करते हुए, एक ही क्वेरी में कई तालिकाओं में पंक्तियों को सम्मिलित करें