PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 16/08/2023 12:13:11

extension plptyhon 3 sur Postgres 15 et python 3.10.0

Bonjour,

Après des recherches sur différents forums, j'ai finalement réussi à créer l'extension plpython3u. De ce que j'ai compris la version de python  compatible avec Postgres 15 est la 3.10. J'ai copié le fichier pyhton310.dll dans mon chemin C:\Windows\System32 afin que de pouvoir créer l'extension.

Maintenant quand je souhaite faire fonctionner la fonction ci-dessous me permettant de récupérer des coordonnées géographiques d'une adresse, postgres se déconnecte systématiquement.  Voici le message d'erreur.

The application has lost the database connection:
⁃ If the connection was idle it may have been forcibly disconnected.
⁃ The application server or database server may have been restarted.
⁃ The user session may have timed out.
Do you want to continue and establish a new session

"CREATE OR REPLACE FUNCTION geocode_nominatim(address text)
RETURNS geometry
AS $$
import requests

try:
    payload = {'q': address, 'format': 'json', 'limit': 1}
    base_geocode = 'https://nominatim.openstreetmap.org/search'
    r = requests.get(base_geocode, params=payload)
    r.raise_for_status()  # Raises an exception for non-2xx responses
    result = r.json()
    if result:
        lon = result[0]['lon']
        lat = result[0]['lat']
        geom = f'SRID=4326;POINT({lon} {lat})'
    else:
        geom = None
except requests.exceptions.RequestException as e:
    # Log the error or take appropriate action
    geom = None

return geom
$$
LANGUAGE 'plpython3u';"

J'ai ouvert aussi le journal afin de comprendre les erreurs, voici la description du message

"2023-08-16 11:05:29.751 CEST [13420] LOG:  le système de bases de données a été arrêté à 2023-08-15 19:06:25 CEST
2023-08-16 11:10:29.684 CEST [10608] LOG:  début du checkpoint : time
2023-08-16 11:10:29.710 CEST [10608] LOG:  checkpoint terminé : a écrit 3 tampons (0.0%); 0 fichiers WAL ajoutés, 0 supprimés, 0 recyclés ; écriture=0.004 s, synchronisation=0.006 s, total=0.028 s; fichiers synchronisés=2, plus long=0.004 s, moyenne=0.003 s; distance=0 kB, estimation=0 kB
2023-08-16 11:13:36.931 CEST [12000] LOG:  n'a pas pu recevoir les données du client : unrecognized winsock error 10054
2023-08-16 11:13:36.931 CEST [1676] LOG:  n'a pas pu recevoir les données du client : unrecognized winsock error 10054
2023-08-16 11:13:36.934 CEST [4044] LOG:  n'a pas pu recevoir les données du client : unrecognized winsock error 10054
2023-08-16 11:15:29.707 CEST [10608] LOG:  début du checkpoint : time
2023-08-16 11:15:29.939 CEST [10608] LOG:  checkpoint terminé : a écrit 3 tampons (0.0%); 0 fichiers WAL ajoutés, 0 supprimés, 0 recyclés ; écriture=0.215 s, synchronisation=0.005 s, total=0.232 s; fichiers synchronisés=3, plus long=0.002 s, moyenne=0.002 s; distance=2 kB, estimation=2 kB
2023-08-16 11:15:30.874 CEST [12596] FATAL:  authentification par mot de passe échouée pour l'utilisateur  « postgres »
2023-08-16 11:15:30.874 CEST [12596] DÉTAIL:  La connexion correspond à la ligne 89 du pg_hba.conf : « host    all             all             ::1/128                 scram-sha-256 »
Python path configuration:
  PYTHONHOME = (not set)
  PYTHONPATH = (not set)
  program name = 'python'
  isolated = 0
  environment = 1
  user site = 1
  import site = 1
  sys._base_executable = 'C:\\Program Files\\PostgreSQL\\15\\bin\\postgres.exe'
  sys.base_prefix = ''
  sys.base_exec_prefix = ''
  sys.platlibdir = 'lib'
  sys.executable = 'C:\\Program Files\\PostgreSQL\\15\\bin\\postgres.exe'
  sys.prefix = ''
  sys.exec_prefix = ''
  sys.path = [
    'C:\\WINDOWS\\SYSTEM32\\python310.zip',
    '.\\DLLs',
    '.\\lib',
    'C:\\Program Files\\PostgreSQL\\15\\bin',
  ]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'"

J'ai l'impression que postgresl n'arrive pas à se connecter correctement à python 3.10 alors que dans les variables d'environnements j'ai bien ajouté les chemin d'accès python. Si qqun à déja eu ce problème, pourrait-il m'aider svp ?

Hors ligne

#2 16/08/2023 16:08:59

rjuju
Administrateur

Re : extension plptyhon 3 sur Postgres 15 et python 3.10.0

J'ai copié le fichier pyhton310.dll dans mon chemin C:\Windows\System32 afin que de pouvoir créer l'extension.


Je ne suis pas utilisateur de Windows mais je suis à peu près sûr que la bonne façon de faire est de configurer le PATH ou autre variable, soit global soit pour l'utilisateur démarrant le service postgres, afin que le répertoire où python est installé soit visible.  Sans ça vous n'aurez qu'une partie de python disponible et de nombreuses erreurs assez bizarres, telles que ce que vous montrez ici.

Hors ligne

Pied de page des forums