====== PostgreSQL ====== ===== Dump & restauration ===== pg_dump ne bloque pas les tables pendant la sauvegarde. La base peut donc continuer à être utilisée en lecture et écriture pendant le dump * Faire le dump d'une base : # Le -W sert à afficher un prompt pour renseigner le mot de passe du user SQL. L'option -Fc permet de compresser l'archive pg_dump -U dbuser -W -d mydatabase -Fc > mydatabase.dump * Faire le dump des roles : pg_dumpall -U postgres --roles-only -w > roles.dump * Transformer le dump (binaire) en fichier texte pour le lire : pg_restore -f - mydatabase.bin > mydatabase.sql * Restaurer une sauvegarde faite avec pg_dumpall (par exemple des roles) : psql -U postgres -w roles.dump * Restaurer une sauvegarde faite pg_dump : pg_restore -d mydatabase mydatabase.dump Source : [[https://www.postgresql.org/docs/15/app-pgdump.html]] ===== Divers ===== Il est possible de se connecter directement à PostgreSQL en configurant un fichier .pgpass dans le home d'un user Unix. Le fichier doit avoir un niveau de permission 0600 et être à ce format : hostname:port:database:username:password # Exemple pour un accès à toutes les bases en local localhost:5432:*:postgres:mypassword Lister les bases :\l; Afficher la structure d'une table :\d matable; Afficher la taille d'une table :select pg_size_pretty (pg_relation_size('matable')); Afficher l'historique des requêtes :\s; Reset le mot de passe du user postgres: vim /etc/postgresql/XX/main/pg_hba.conf # Remplacer la méthode md5 par trust pour le user postgres systemctl restart postgresql psql -U postgres # Dans PostgreSQL ALTER USER postgres with PASSWORD 'monmdp'; ===== Mise à jour ===== ==== Sur une VM ==== La mise à jour vers une nouvelle version majeure PostgreSQL implique d'installer les paquets de la nouvelle version, puis de mettre à jour les clusters. Exemple avec une migration de PostgreSQL 11 à PostgreSQL 13 : systemctl stop postgresql # Installation des paquets postgresql-11 postgresql-client-11 (directement ou via apt-get upgrade) pg_dropcluster --stop 13 main pg_lsclusters # Permet de lister les clusters présents et voir leur état pg_upgradecluster 11 main pg_dropcluster 11 main apt-get purge postgresql-11 postgresql-client-11 ==== Sous Docker ==== Grandes étapes : * Créer un nouveau container dans la nouvelle version de PostgreSQL * Dump des données du vieux PostgreSQL dans un fichier via pg_dumpall * Import the data into the new container * Copier les données et les fichiers pg_hba.conf et postgresql.conf vers le nouveau container * Supprimer l'ancien container Détail de la procédure : https://openqa-bites.github.io/posts/2023/2023-11-23-upgrade_a_postgresql_container_to_a_new_major_version/ ===== Process ===== Lister les requêtes en cours : SELECT * FROM pg_stat_activity; Tuer une requete : SELECT pg_cancel_backend(); OU SELECT pg_terminate_backend(); ===== Sources et compléments ===== https://www.postgresqltutorial.com/