Atualizei meu postgres da versão 13.5 para 16.2 (e o RHEL de 7.5 para 8.9). O problema é que o python não foi atualizado.
Criei o procedimento pyver():
CREATE OR REPLACE FUNCTION pyver ()
RETURNS TEXT
AS $$
import sys
pyversion = sys.version
return pyversion
$$ LANGUAGE 'plpython3u';
Para mostrar a versão python usada pelo Postgres.
Quando executo no Python 13.5, obtenho este resultado:
psql (13.5)
Type "help" for help.
postgres@database # select pyver();
pyver
-----------------------------------------
3.6.8 (default, Aug 13 2020, 07:36:02) +
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
(1 řádka)
postgres@database #
E quando executo no banco de dados atualizado, obtenho este resultado:
psql (16.2)
Type "help" for help.
database=# select pyver();
pyver
-----------------------------------------
3.6.8 (default, Jan 5 2024, 09:14:44) +
[GCC 8.5.0 20210514 (Red Hat 8.5.0-20)]
(1 row)
database=#
No novo RedHat está o Python 3.9.18 instalado.
Como faço para que o postgres use uma versão mais recente do python?
A atualização foi feita desta forma:
- foi instalado novo servidor com RedHat 8.9 (Python 3.9)
- foi instalado os binários do Postgres (versão 13.5) e criado o usuário postgres
- então foi conectado o disco com bancos de dados Postgres (versão 13.5) do servidor antigo
- o banco de dados foi iniciado no novo servidor
- o próximo passo foi a instalação do Postgres 16.2
- então foi iniciado o upgrade dos bancos de dados para a nova versão do Postgres através deste comando:
time /usr/pgsql-16/bin/pg_upgrade --jobs=16 -d /postgres/pgsql/database/data13 -D /postgres/pgsql/database/data16 -b /usr/pgsql-13/bin/ -B /usr/pgsql-16/bin/ --link
- após a atualização executa o banco de dados na nova versão
E agora encontramos o problema com Python.
O banco de dados principal tem tamanho de 70 TB.
Obrigado Michal