Vous n'êtes pas identifié(e).
le message indique
HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE postgres REFRESH COLLATION VERSION
Est-ce que ça veut dire que si je force la collation
CREATE DATABASE "scratch"
WITH OWNER "postgres"
ENCODING 'UTF8'
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8';
je n'aurai rien à faire lors de la récupération d'un backup sun un OS plus récent? Ca m'intéresse de savoir comment éviter de reconstruire les indexes lors des (inévitables) migrations.
Merci.
Ce n'est pas clair.
Le slave ne sert qu'en cas de désastre. Si on le promeut et que directement après, on recrée les indexes, les bases seront-elles consistentes? (sans quoi ce slave ne sert à rien).
Sinon, comment peut se passer le passage sur un nouveau matos (rh9) sans devoir faire un pg_basedump? (la db fait 2Tb, les downtimes sont limités).
Et je suppose que lorsque l'on fera cela, le slave devra être rebuildé.
Bonjour,
j'ai un master sous centos 7, postgresql 15.7. (x86_64)
J'ai un slave sous red hat 9, postgresql 15.8. (x86_64)
J'ai un warning sur le slave:
[postgres@PR-DRS-DBC-01 log]$ psql
WARNING: database "postgres" has a collation version mismatch
DETAIL: The database was created using collation version 2.17, but the operating system provides version 2.34.
HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE postgres REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
psql (15.8)
Type "help" for help.
C'est grâve docteur?
Apparemment il faudrait logiquement changer la collation du master, mais je ne suis pas sur que je peux encore updater centos 7. Du nouveau matos est prévu ... pour l'an prochain.
Par contre, autre idée, est-il possible d'avoir la liste des tables qui n'utilisent PAS la collation par défaut et de la forcer (je crains le downtime).
Et si je ne fais rien sur le master, et que je lance la procédure sur le slave en cas de désastre, quel sera le downtime?
Merci.
Pour ceux qui auraient le même souci, voilà la cause:
le dossier de config (contenant les fichier .conf comprenait aussi un fichier nommé PG_VERSION alors que les données sont dans un autre répertoire.
J'ai mis config et données dans le même dossier et c'est passé.
Bonjour,
j'ai une vm avec un pg 15, une db de 2Tb, 24Gb RAM, 8 coeurs (16 threads).
j'ai mis
max_connections=150
shared_buffers = 7144MB
effective_cache_size = 11200MB
maintenance_work_mem = 1536MB
work_mem=22MB
Quand je lance postgrestuner j'ai ce message
[WARN] The sum of max_memory and effective_cache_size is too high, the planner may create bad plans because the system buffercache will probably be smaller than expected, especially if the machine is NOT dedicated to PostgreSQL.
par contre is cache_size-4Gb<buffer_size, j'ai aussi une erreur.
Devrais-je réduire les deux ou jouer avec un autre paramètre?
Merci.
initdb a été fait avec la version 15 avant de lancer pg_upgrade.
le postgres 15 peut être démarré/arrêté sans erreur, donc ce n'est pas ça.
pg_upgrade se plaint immédiatement que le 10 tourne.
aucun changement
J'ai renvoyé un commentaire sur la page postgres pour signaler que l'ancien serveur doit apparemment être coupé.
Même résultat
-----------------------------------------------------------------
pg_upgrade run on Wed Sep 4 14:23:03 2024
-----------------------------------------------------------------
command: "/usr/pgsql-10/bin/pg_ctl" -w -l "/mnt/pgdata/pgdirbc15/pg_upgrade_output.d/20240904T142303.437/log/pg_upgrade_server.log" -D "/var/lib/pgsql/10/data" -o "-p 50432 -b -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/pgsql'" start >> "/mnt/pgdata/pgdirbc15/pg_upgrade_output.d/20240904T142303.437/log/pg_upgrade_server.log" 2>&1
waiting for server to start....2024-09-04 17:23:03.980 CEST [19033] FATAL: lock file "postmaster.pid" already exists
2024-09-04 17:23:03.980 CEST [19033] HINT: Is another postmaster (PID 25407) running in data directory "/mnt/pgdata/pgdir"?
stopped waiting
pg_ctl: could not start server
Examine the log output.
Bonjour,
Je vais upgrader un postgresql 10 vers 15 sous centos 7 x86_64.
J'aurais voulu tester avant de lancer l'upgrade durant un downtime.
J'ai lancé
/usr/pgsql-15/bin/pg_upgrade -b /usr/pgsql-10/bin/ -B /usr/pgsql-15/bin -d /var/lib/pgsql/10/data -D /mnt/pgdata/pgdirbc15/ --link -c
Ca plante, le log dit:
-----------------------------------------------------------------
pg_upgrade run on Wed Sep 4 09:08:31 2024
-----------------------------------------------------------------
command: "/usr/pgsql-10/bin/pg_ctl" -w -l "/mnt/pgdata/pgdirbc15/pg_upgrade_output.d/20240904T090831.750/log/pg_upgrade_server.log" -D "/var/lib/pgsql/10/data" -o "-p 50432 -b -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/pgsql'" start >> "/mnt/pgdata/pgdirbc15/pg_upgrade_output.d/20240904T090831.750/log/pg_upgrade_server.log" 2>&1
waiting for server to start....2024-09-04 12:08:32.179 CEST [12197] FATAL: lock file "postmaster.pid" already exists
2024-09-04 12:08:32.179 CEST [12197] HINT: Is another postmaster (PID 25407) running in data directory "/mnt/pgdata/pgdir"?
stopped waiting
pg_ctl: could not start server
Examine the log output.
Donc il se plaint que l'ancien tourne (c'est la prod, je ne peux pas l'arrêter comme je veux).
Pourtant, la doc dit (https://www.postgresql.org/docs/15/pgupgrade.html)
You can use pg_upgrade --check to perform only the checks, even if the old server is still running.
Un moyen de contourner ce souci?
Merci
Ca marchera pour mon test lab.
Par contre par sur que c'est une bonne idée pour le système de prod (on a un vieux centos 7 postgres 10, et des postgres 13 sous centos 8).
dnf install postgresql postgresql
initdb -k -D ....
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf install -y postgresql15-server postgresql15
C'est un test lab avant upgrade sur la machine réelle (plusieurs Tb de db)
pg_upgrade -b .... -B ... -d ... -D ... -k -v
L'upgrade a marché
=>
dnf remove postgresql
./psql fonctionne du dossier des binaires de pg15, mais il n'y a pas de lien dans /usr/bin, donc il faut positionner un path.
J'aimerais recréer les liens.
Bonjour,
J'ai un serveur red hat 9 avec postgres 13.
Le but est d'upgrader vers postgres 15 (in-place upgrade), donc je dois avoir les deux versions sur le serveur.
Lors de l'installation de postgres 15, j'ai ces messages:
failed to link /usr/bin/psql -> /etc/alternatives/pgsql-psql: /usr/bin/psql exists and it is not a symlink
failed to link /usr/bin/clusterdb -> /etc/alternatives/pgsql-clusterdb: /usr/bin/clusterdb exists and it is not a symlink
failed to link /usr/bin/createdb -> /etc/alternatives/pgsql-createdb: /usr/bin/createdb exists and it is not a symlink
failed to link /usr/bin/createuser -> /etc/alternatives/pgsql-createuser: /usr/bin/createuser exists and it is not a symlink
failed to link /usr/bin/dropdb -> /etc/alternatives/pgsql-dropdb: /usr/bin/dropdb exists and it is not a symlink
failed to link /usr/bin/dropuser -> /etc/alternatives/pgsql-dropuser: /usr/bin/dropuser exists and it is not a symlink
failed to link /usr/bin/pg_basebackup -> /etc/alternatives/pgsql-pg_basebackup: /usr/bin/pg_basebackup exists and it is not a symlink
failed to link /usr/bin/pg_dump -> /etc/alternatives/pgsql-pg_dump: /usr/bin/pg_dump exists and it is not a symlink
failed to link /usr/bin/pg_dumpall -> /etc/alternatives/pgsql-pg_dumpall: /usr/bin/pg_dumpall exists and it is not a symlink
failed to link /usr/bin/pg_restore -> /etc/alternatives/pgsql-pg_restore: /usr/bin/pg_restore exists and it is not a symlink
failed to link /usr/bin/reindexdb -> /etc/alternatives/pgsql-reindexdb: /usr/bin/reindexdb exists and it is not a symlink
failed to link /usr/bin/vacuumdb -> /etc/alternatives/pgsql-vacuumdb: /usr/bin/vacuumdb exists and it is not a symlink
Après l'upgrade, psql ne fonctionne plus, je dois ajouter le dossier des binaires pgsql au path.
Y a-t'il un script qui pourrait recréer tous les liens dans /usr/bin?
Merci.
Bonjour,
j'aimerais utiliser le partitionnement de manière à mettre dans certaines partitions des données qui ne seront plus jamais modifiées (données qui sont volumineuses), mais qui doiivent rester accessibles en ligne.
Le but serait de
* marquer ces partitions "readonly",
* backuper ces partitions une seule fois,
* exclure ces partitions du backup hebdomadaire ou mensuel pris avec pg_base_backup.
En cas de récupération d'un backup, les partitions seraient reprises indépendamment du backup.
Oracle permet de faire cela mais je n'ai pas vu d'options postgres permettant de le faire, tout au plus j'ai vu la possibilité de placer les partitions dans un répertoire (tablespace) séparé.
Est-ce possible ou prévu dans la version suivante? Je n'ai pas trouvé non plus où "voter" pour des fonctionnalités dans les versions futures.
Merci
Bonjour,
j'ai une db volumineuse (5Tb). Les sysadmins voudraient tout passer en docker.
Le souci est que si je veux faire un in-place upgrade (car la db est grosse), je dois spécifier les anciens binaires:https://www.postgresql.org/docs/16/pgupgrade.html .
Est-il possible de créer un même docker qui contienne deux versions différentes de postgres?
Merci.
Bonjour,
j'ai une db de plusieurs Tb tournant sous postgres 10.x sous linux 7.
J'aimerais tester une migration de la manière suivante:
créer une vm linux 9
installer pg 10 et pg 16 sur la nouvelle vm
créer un standby sous pg10
tester l'upgrade vers pg16
Souci: pg10 n'est apparemment plus dans les repos pg 9. Y a-t'il moyen de l'ajouter? Ou dois-je passer par RH8 puis RH 9 ?
Bonjour,
J'ai mis en place une réplication (hot standby, réplication physique, pas logique) entre deux bâtiments distincts.
* est-il possible de faire en sorte que le primaire stoppe si le standby est déconnecté?
* la solution "préconisée" pour faire un switchover est de couper le primaire puis faire un "promote" sur le standby. En coupant le primaire, ne risque-t'on pas d'arrêter la réplication en cours et donc de créer un gap entre le primaire et le standby?
* Y a-t'il un script à tourner sur le primaire , au cas où ils ne serait plus connecté, de mettre quelque part les wal non reçus par le standby (wals qui seraient envoyés manuellement)?
* quand on coupe le primaire, s'assure-t'il de transmettre jusqu'au dernier wal vers le standby avant de s'arrêter?
Le but étant de diminuer le risque de perte de données en cas de basculement contrôlé.
Merci des réponses et conseils.
j'ai recommencé la manoeuvre.
1. restore data
2. adaptation postgresql.conf sur la cible:
archive_mode = off
wal_level = minimal
restore_command = 'cp /var/lib/pgsql/13/wal/%f %p'
delete standby.signal, création d'un fichier recovery.signal dans la datadir.
systemctl start postgresql-13
log:
2023-05-17 18:44:05.923 -01 [29950] LOG: starting PostgreSQL 13.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2023-05-17 18:44:05.925 -01 [29950] LOG: listening on IPv4 address "0.0.0.0", port 5432
2023-05-17 18:44:05.925 -01 [29950] LOG: listening on IPv6 address "::", port 5432
2023-05-17 18:44:05.928 -01 [29950] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-05-17 18:44:05.933 -01 [29950] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-05-17 18:44:05.940 -01 [29953] LOG: database system was interrupted; last known up at 2023-05-01 00:00:02 -01
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 18:44:06.102 -01 [29953] LOG: starting archive recovery
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000001000000D700000014’: No such file or directory
2023-05-17 18:44:06.114 -01 [29953] LOG: redo starts at D7/14000028
2023-05-17 18:44:06.118 -01 [29953] LOG: consistent recovery state reached at D7/14000138
2023-05-17 18:44:06.150 -01 [29953] LOG: restored log file "00000001000000D700000015" from archive
2023-05-17 18:44:06.432 -01 [29953] LOG: redo done at D7/14000138
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000001000000D700000014’: No such file or directory
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 18:44:06.453 -01 [29953] LOG: selected new timeline ID: 2
2023-05-17 18:44:06.760 -01 [29953] LOG: archive recovery complete
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000001.history’: No such file or directory
2023-05-17 18:44:06.816 -01 [29950] LOG: database system is ready to accept connections
souci:
le dossier /var/lib/pgsql/13/wal contient les wal 00000001000000D700000015 00000001000000D700000016 00000001000000D700000017 qui ont l'air d'avoir été superbement ignorés... mais ils ont été copiés sous pg_wal avec un timeline différent (le préfixe est devenu 00000002 et un fichier 00000002.history est créé sous pg_wal et contient: 1 D7/15000000 no recovery target specified.
Questions: pourquoi une seconde timeline? Pourquoi pas de recovery?
Merci.
Pourquoi a-t'il besoin de ce fichier? Dans le dossier wal, il n'y a que des .wal, pas autre chose...
Bonjour,
j'ai un backup postgres 13 qui a été effectué avec pg_base_backup, ainsi qu'un dossier de wal (3 fichiers 00000001000000D700000015..17).
Je dois restaurer une copie et appliquer les wal sur une autre machine (postgres 13 aussi ).
Sur la cible:
* stop postgres
* copie data/Restore backup
* effacement du sous-dossier pg_wal du backup
* création de standby.signal:
restore_command = 'cp /mnt/nfs/backup-replica/wal/%f %p'
* adaptation du postgresql.conf: force log_level=minimal, hot_standby=off, restore_command = 'cp /mnt/nfs/backup-replica/wal/%f %p'
start postgres: Il prend le premier wal puis stoppe sur cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory:
2023-05-17 12:40:42.447 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:40:47.449 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:40:52.452 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:40:57.453 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:41:02.555 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:41:07.544 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:41:12.565 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
Or postgres peut écrire sous /var/lib/pgsql/13/wal.
Quelqu'un peut-il m'éclairer sur cette "erreur"?
Merci!
Bonjour,
je voudrais exporter une table nommée "bievent' (d'un vieux postgres 9.2) pour l'importer dans une db de test.
Mon user n'a accès qu'en lecture mais pas en écriture (production).
PGPASSWORD=<mon passwd> pg_dump -f /tmp/lz.dmp -O -t bievent -h 127.0.0.1 -p 5433 -U <monuser> <database>
Mais j'obtiens
pg_dump: [archiver (db)] query failed: ERROR: permission denied for relation bievent_id_seq
pg_dump: [archiver (db)] query was: SELECT sequence_name, start_value, increment_by, CASE WHEN increment_by > 0 AND max_value = 9223372036854775807 THEN NULL WHEN increment_by < 0 AND max_value = -1 THEN NULL ELSE max_value END AS max_value, CASE WHEN increment_by > 0 AND min_value = 1 THEN NULL WHEN increment_by < 0 AND min_value = -9223372036854775807 THEN NULL ELSE min_value END AS min_value, cache_value, is_cycled FROM bievent_id_seq
Bref, il ne peut pas lire la séquence bievent_id_seq (qui donne l'id de la table) , refuse de faire un dump, mais ce n'est pas la séquence que je veux exporter mais bien la table.
J'ai essayé sans succès:
* d'ajouter -a
* d'ajouter --inserts
* d'ajouter -T bievent_id_seq
Comment puis-je faire pour n'exporter QUE la table?
Merci.
entre-termps j'ai trouvé, il faut maintenant ajouter un fichier nommé standby.signal dans le dossier de données du standby, et tout fonctionne.
Bonjour,
J'ai mis en place un standby entre deux postgres 13 (centos 7) en utilisant la même confiig qui fonctionnait parfaitement entre deux postgres 10, à savoir:
* sur le master:
listen_addresses = '*'
archive_command = 'test ! -f /var/lib/pgsql/13/wal/%f && cp %p /var/lib/pgsql/13/wal/%f'
archive_mode=on
+ 1 ligne dans pg_hba.conf
* sur le slave:
listen_addresses = '*'
port=5433
primary_conninfo = 'host=127.0.0.1 user=postgres'
hot_standby = on
restore_command = 'cp /var/lib/pgsql/13/wal/%f %p'
archive_cleanup_command = '/usr/pgsql-13/bin/pg_archivecleanup /var/lib/pgsql/13/wal %r'
Mais ca ne marche plus: le slave ne se connecte pas au master, ne copie pas les mises à jour (j'ai généré 1Gb d'updates) et ne donne pas d'erreur:
2021-06-25 10:59:12.928 CEST [3797] LOG: database system is ready to accept connections
Régression? Ou est-on maintenant obligé d'utiliser les "replication slots"? J'ai essayé de créer un "replication user", sans changement.
Merci.
ca, ca permet de voir les liens. Si j'envoie la question à pgsql-jdbc@lists.postgresql.org, j'espère que ca ne va pas envoyer le messages au million d'abonnés?
Auriez-vous un lien vers leur liste de discussion où je peux leur poser la question?