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
# 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
pg_dumpall -U postgres --roles-only -w > roles.dump
pg_restore -f - mydatabase.bin > mydatabase.sql
psql -U postgres -w roles.dump
pg_restore -d mydatabase mydatabase.dump
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';
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
Grandes étapes :
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/
Lister les requêtes en cours :
SELECT * FROM pg_stat_activity;
Tuer une requete :
SELECT pg_cancel_backend(<pid OF the process>); OU SELECT pg_terminate_backend(<pid OF the process>);