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 17/11/2021 02:29:00

Imagin0s
Membre

Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Bonjour,

Je suis en train d'upgrader de Postgres 9.6 vers Postgres 13.4.
J'ai bien lancé l'étape init_db, mais j'ai une erreur "No such file or directory" lors de la phase pg_upgrade :

[postgres_artifactory@sxxxxxxxxxx bin]$ /usr/pgsql-13/bin/pg_upgrade -v -b /usr/pgsql-9.6/bin -B /usr/pgsql-13/bin -d /applis/24140-tdgg/artifactory/postgres/data/9.6/db -D /applis/24140-tdgg/artifactory/postgres/data/13.4/db
bash: /usr/pgsql-13/bin/pg_upgrade -v -b /usr/pgsql-9.6/bin -B /usr/pgsql-13/bin -d /applis/24140-tdgg/artifactory/postgres/data/9.6/db -D /applis/24140-tdgg/artifactory/postgres/data/13.4/db: No such file or directory

C'est étrange car tous les répertoires utilisés en valeur des options existent bien :
/usr/pgsql-9.6/bin
/usr/pgsql-13/bin
/applis/24140-tdgg/artifactory/postgres/data/9.6/db
/applis/24140-tdgg/artifactory/postgres/data/13.4/db

Auriez-vous une idée SVP ?
Si vous avez des questions/remarques, n'hésitez pas.

Merci d'avance.

Cdt.

Hors ligne

#2 17/11/2021 06:19:34

rjuju
Administrateur

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Bonjour,


Etes-vous sûr que le binaire /usr/pgsql-13/bin/pg_upgrade existe, ou pointe vers un fichier existant ?

Hors ligne

#3 17/11/2021 09:14:55

gleu
Administrateur

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Le message d'erreur me donne plutôt l'impression qu'il prend la ligne complète comme la commande. N'auriez vous pas fait un copier/coller d'un document Word ou PDF ? Avez-vous tapé la commande vous même ou est-ce un copier/coller ?


Guillaume.

Hors ligne

#4 17/11/2021 09:47:22

Imagin0s
Membre

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Bonjour,

@rjuju : Oui, j'ai vérifié l'existence des fichiers/répertoires

@gleu : En effet, c'est un soucis de copier-coller. Le bash ne doit pas être top, j'ai fait un CC à partir de la commande de l'history bash et il y a du y avoir des caractères mal traduits.
Je viens de relancer la commande, ça a avancé mais j'ai cette erreur maintenant :

[postgres_artifactory@sxxxxxxxxxx ~]$ /usr/pgsql-13/bin/pg_upgrade -v -b /usr/pgsql-9.6/bin -B /usr/pgsql-13/bin -d /applis/24140-tdgg/artifactory/postgres/data/9.6/db -D /applis/24140-tdgg/artifactory/postgres/data/13.4/db

...

executing: SELECT pg_catalog.set_config('search_path', '', false);
Checking database user is the install user                  executing: SELECT rolsuper, oid FROM pg_catalog.pg_roles WHERE rolname = current_user AND rolname !~ '^pg_'

database user "postgres_artifactory" is not the install user
Failure, exiting
"/usr/pgsql-9.6/bin/pg_ctl" -w -D "/applis/24140-tdgg/artifactory/postgres/data/9.6/db" -o "" -m fast stop >> "pg_upgrade_server.log" 2>&1

Pourtant, j'ai bien fait l'initdb du cluster d'origine version 9.6 et du cluster cible 13.4 avec le user postgres_artifactory.

Merci d'avance.
Cdt.

Dernière modification par Imagin0s (17/11/2021 10:40:06)

Hors ligne

#5 17/11/2021 10:24:05

gleu
Administrateur

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Il y a bien un rôle postgres_artifactory de créer sur les deux instances ?


Guillaume.

Hors ligne

#6 17/11/2021 10:45:51

Imagin0s
Membre

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

J'ai démarré le service de postgres 9.6 pour me connecter à la DB et lister les rôles et j'ai ce résultat :

[postgres_artifactory@xxxxxxxxxxx ~]$ psql -d postgres
psql (13.4, server 9.6.11)
Type "help" for help.

postgres=# \du
                                               List of roles
            Role name             |                         Attributes                         | Member of
----------------------------------+------------------------------------------------------------+-----------
 admin_pgsql                      | Create role, Create DB                                     | {}
 artifactory                      |                                                            | {}
 artifactory_tower                |                                                            | {}
 cbe5b6d305d0d2393a438cb6d8efb534 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres                         | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgres_artifactory             | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 replication                      | Replication                                                | {}
 xray                             |                                                            | {}

J'ai également démarré le service de postgres 13.4 mais lorsque j'essaie de me connecter à la DB j'ai cette erreur :

root@xxxxxxxxxxx:/etc/systemd/system$ psql -d postgres
psql: error: FATAL:  role "root" does not exist

Je n'ai rien créée en terme de rôle sur la nouvelle instance en 13.4, juste lancé un initdb. Etant donné que l'ancienne instance a été créée avec un user non standard "postgres_artifactory", voulez-vous dire qu'il faut que je créée également ce rôle dans la nouvelle instance avant de lancer le pg_upgrade ?
Comment puis-je le faire ?

Merci d'avance.

Cdt.

Hors ligne

#7 17/11/2021 10:56:36

gleu
Administrateur

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Tout dépend de comment vous avez fait l'installation (plus exactement l'initdb). Si je devais deviner, je dirais qu'il vous manque juste un "-U postgres" pour pg_upgrade, mais c'est vraiment de la devinette, faute d'informations suffisantes.


Guillaume.

Hors ligne

#8 17/11/2021 11:08:54

Imagin0s
Membre

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Voici la commande qui a été lancée pour initier la DB postgres en 9.6 :

su - postgres_artifactory
/usr/pgsql-9.6/bin/initdb --pgdata=/applis/24140-tdgg/artifactory/postgres/data/9.6/db --xlogdir=/applis/24140-tdgg/artifactory/postgres/backup/9.6/current_xlog -E 'UTF-8' --lc-collate='en_GB.UTF-8' --lc-ctype='en_GB.UTF-8' -U postgres_artifactory -W

J'ai essayé de refaire le pg_upgrade en ajoutant -U postgres :
/usr/pgsql-13/bin/pg_upgrade -v -b /usr/pgsql-9.6/bin -B /usr/pgsql-13/bin -d /applis/24140-tdgg/artifactory/postgres/data/9.6/db -D /applis/24140-tdgg/artifactory/postgres/data/13.4/db -U postgres
mais nous avons la même erreur :

...
database user "postgres" is not the install user
Failure, exiting
"/usr/pgsql-9.6/bin/pg_ctl" -w -D "/applis/24140-tdgg/artifactory/postgres/data/9.6/db" -o "" -m fast stop >> "pg_upgrade_server.log" 2>&1

Hors ligne

#9 17/11/2021 14:42:37

Imagin0s
Membre

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Après quelques recherches, j'ai trouvé un sujet sur un autre forum qui indique que l'install user est celui avec un OID de 10 (cf. https://issueexplorer.com/issue/zalando/spilo/602)
En listant l'ensemble de mes rôles sur le base postgres 9.6 d'origine, j'obtiens ceci :

postgres=# SELECT * FROM pg_roles;
             rolname              | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |  oid
----------------------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
 pg_signal_backend                | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  4200
 cbe5b6d305d0d2393a438cb6d8efb534 | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           |    10
 postgres_artifactory             | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           | 16385
 replication                      | f        | t          | f             | f           | t           | t              |           -1 | ********    |               | f            |           | 16384
 artifactory                      | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 16387
 admin_pgsql                      | f        | t          | t             | t           | t           | f              |           -1 | ********    |               | f            |           | 16386
 postgres                         | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           | 16388
 xray                             | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 24629
 artifactory_tower                | f        | t          | f             | f           | t           | f              |           -1 | ********    |               | f            |           | 36418
(9 rows)

Le 2ème rôle " cbe5b6d305d0d2393a438cb6d8efb534" a l'OID 10. Je me demande s'il faut le renommer en postgres_artifactory (si c'est possible d'avoir un doublon) ou bien attribuer l'OID 10 à mon userpostgres_artifactory.
Aurez-vous une suggestion ? J'aimerai éviter de tout casser.

Cdt.

Dernière modification par Imagin0s (17/11/2021 14:43:31)

Hors ligne

#10 17/11/2021 14:53:37

gleu
Administrateur

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Il n'est pas possible d'avoir deux rôles de même nom. Ce nom (cbe5b6d305d0d2393a438cb6d8efb534) est très étonnant. Vous ne pourrez pas le supprimer car il s'agit du rôle d'install. Je ne vois que deux solutions :
1. renommer postgres_artifactory en n'importe quoi (postgres_artifactory_old par exemple), puis renommer cbe5b6d305d0d2393a438cb6d8efb534 en postgres_artifactory (si c'est possible)
2. créer la nouvelle instance avec cbe5b6d305d0d2393a438cb6d8efb534 comme nom d'install et faire le pg_upgrade avec un "-U cbe5b6d305d0d2393a438cb6d8efb534"


Guillaume.

Hors ligne

#11 19/11/2021 15:15:41

Imagin0s
Membre

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

Bonjour @gleu,

Oui, j'ai résolu ce soucis en utilisant la méthode 1. en tant que user postgres (car pas possible de renommer le user de la session active)

Pour info, suite à 5/6 problèmes à résoudre en utilisant la méthode pg_upgrade, j'ai laissé tomber et je me suis dirigé vers la méthode "18.6.1. Upgrading Data via pg_dumpall"
Ca a l'air de mieux marcher.

Par contre, je n'ai pas l'étape "Post-upgrade processing" (cf. cette doc : https://www.postgresql.org/docs/13/pgupgrade.html) qui me semble utile.
Cette étape a-t-elle une utilité ds notre cas présent ?

Merci d'avance.
Cordialement.

Hors ligne

#12 19/11/2021 15:29:06

gleu
Administrateur

Re : Upgrade postgres 9.6 => 13.4 : pg_upgrade : No such file or directory

La méthode pg_dumpall est beaucoup simple que la méthode pg_upgrade. Elle est sûre de fonctionner. Par contre, elle est aussi sûrement plus lente.

Comme ce sont deux méthodes très différentes, il n'est pas étonnant que les étapes ne soient pas identiques. ET donc l'étape "Post-upgrade processing" n'existe pas pour pg_dumpall.


Guillaume.

Hors ligne

Pied de page des forums