PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

GALAT:tidak dapat mengakses file “$libdir/plpython2” – ERROR:tidak dapat mengakses file “$libdir/plpython3”

Kesalahan di atas dijelaskan pada pengiriman PG karena gagal CREATE LANGUAGE plpython2u/plpython3u di PG9.3Beta.

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

Sebelum melakukan beberapa studi tentang kesalahan di atas, saya membaca tautan dokumentasi PG di bawah tentang bagaimana PostgreSQL mengizinkan untuk membuat plpython bahasa dan bagaimana mereka harus dikonfigurasi.

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

Jelas dari tautan di atas Anda perlu mengkompilasi biner dua kali jika Anda membutuhkan plpython2u &plpython3u. AFAIK, ActivePython 2.7.x untuk plpython2u dan 3.2.x untuk plpython3u dapat dikonfigurasi pada PG 9.2.x tanpa kesulitan, tetapi saya tidak pernah mencoba PG 9.3Beta2. Jadi, pertimbangkan untuk mencoba dan menganalisis kesalahan tentang mengapa dan bagaimana hal itu dapat diperbaiki, pertama-tama saya memulai instalasi sumber dengan mengatur jalur dasar dengan ActivePython 3.2. (Tautan unduhan 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

Kompilasi gagal dan menunjukkan kesalahan dalam file Config.log sebagai:

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'

Dalam dokumentasi PG kami memiliki petunjuk yang jelas tentang kesalahan di atas dan mengapa itu terjadi, plpython akan menjadi perpustakaan bersama di sebagian besar platform, tetapi pada beberapa platform kami perlu secara khusus memaksa kompiler sebagai python dari perpustakaan bersama. Untuk itu Anda dapat melanjutkan ke /src/pl/python/Makefile untuk perubahan atau secara khusus menyatakan “shared_libpython=yes” saat kompilasi.

Kompilasi sumber memeriksa dua file saat Anda menggunakan –dengan-python yaitu “python” &“python-config”. Meskipun saya memiliki ActivePython-3.2 di jalur dasar saya, tetap saja kompiler gagal menemukannya "python" &"python-conifg"

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

Itu karena, dalam nama file ActivePython 3.2 akan, "python" sebagai "python3" dan "python-config" sebagai "python3-config" oleh karena itu kompiler menunjuk ke yang lama alih-alih yang baru. Pada titik ini, Asif Naeem (Terima kasih atas wawasan Anda) dari Dev inti kami. Tim memberi tahu saya untuk mengejek file ActivePython-3.2 yang ada sebagai python &python-config. Ini hampir seperti peretasan darinya, jadi saya menggandakan file-file itu sebagai:

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

Oke, sekarang saya bisa melihatnya di jalur dasar saya.

[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

Saya mengkompilasi ulang sumber PG menggunakan –with-python setelah perubahan dan juga memaksa kompiler untuk memilih SHARED_LIBPYTHON menggunakan "shared_libpython".

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

Langkah-langkah ini akan secara efektif mengompilasi PG9.3Beta dengan pustaka ActivePython-3.2. Sekarang mari kita buat bahasa 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.
!>
!>

Ups, ini aneh, mengapa sekarang macet.. Dalam situasi seperti ini $PGDATA/pg_log adalah teman Anda untuk mendapatkan wawasan tentang masalah ini. Berikut informasi log server database tentang crash:

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

Oke. Saya gagal menyetel jalur python, ini sangat penting ketika Anda bekerja dengan bahasa python atau perl di database Anda.
Saya telah menyetel PYTHONHOME, PYTHONPATH &LD_LIBRARY_PATH sebelum memulai cluster.

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

Bagus…Ini telah membuat plpython3u dengan ActivePython-3.2.

Jika Anda ingin plpython2u juga pada instalasi yang sama. Jangan men-tweak seperti yang kami lakukan untuk ActivePython-3.2, cukup miliki salinan ActivePython-2.7 dan atur di jalur dasar dan kompilasi ulang sumbernya.

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

Komentar &Koreksi sangat diharapkan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Barman untuk Pemulihan Bencana PostgreSQL

  2. Buat PERAN PostgreSQL (pengguna) jika tidak ada

  3. bagaimana cara meniru insert abaikan dan pada pembaruan kunci duplikat (penggabungan sql) dengan postgresql?

  4. Jalankan pemicu yang ditangguhkan hanya sekali per baris di PostgreSQL

  5. Tipe Data PostgreSQL dan C#