# Aide-Mémoire Diagnostic PostgreSQL Ce fichier regroupe les commandes essentielles pour diagnostiquer les problèmes de connexion, de droits et de performance sur PostgreSQL. ## 0. Diagnostic sur la machine hote (avant psql) ### 0.1 Savoir si PostgreSQL est installe ```bash psql --version which psql ``` ### 0.2 Savoir si PostgreSQL tourne (service ou processus) ```bash sudo systemctl status postgresql sudo service postgresql status ps aux | grep -E "postgres|postmaster" ``` ### 0.3 Savoir si c'est Docker ou installe localement ```bash docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}" | grep -i postgres ``` ### 0.4 Verifier le port d'ecoute (5432 par defaut) ```bash ss -lntp | grep 5432 netstat -lntp | grep 5432 ``` ### 0.5 Localiser les fichiers de configuration sur la machine ```bash # Si PostgreSQL tourne localement, ces commandes donnent les chemins exacts sudo -u postgres psql -c "SHOW config_file;" sudo -u postgres psql -c "SHOW hba_file;" sudo -u postgres psql -c "SHOW data_directory;" ``` Chemins courants (selon distribution) : ```text /etc/postgresql/*/main/postgresql.conf /etc/postgresql/*/main/pg_hba.conf /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/pg_hba.conf ``` ## 1. Connexion au serveur (Ligne de commande) Se connecter en tant que super-administrateur (localement) : ```bash sudo -u postgres psql ``` Tester une connexion distante (depuis une autre machine) : ```bash # -h = hôte, -U = utilisateur, -d = base de données, -W = demander le mot de passe psql -h 192.168.99.35 -U lucien -d medusa_db -W ``` ## 2. Commandes d'Inspection (dans psql `postgres=#`) ### Utilisateurs et Droits | Commande | Description | | :--- | :--- | | `\du` | Liste tous les utilisateurs et leurs rôles (Superuser, Create DB, etc.). | | `\du+` | Même chose avec plus de détails (description). | | `SELECT current_user;` | Affiche l'utilisateur avec lequel vous êtes connecté. | ### Bases de données | Commande | Description | | :--- | :--- | | `\l` | Liste toutes les bases de données et leurs propriétaires. | | `\c ma_base` | Se connecter à la base `ma_base`. | | `\dt` | Liste les tables de la base courante. | ### Configuration et Fichiers | Commande | Description | | :--- | :--- | | `SHOW config_file;` | Affiche le chemin du fichier `postgresql.conf`. | | `SHOW hba_file;` | Affiche le chemin du fichier `pg_hba.conf` (règles de connexion). | | `SHOW listen_addresses;` | Affiche les IPs écoutées (doit être `*` pour accès distant). | | `SHOW port;` | Affiche le port (défaut 5432). | | `SHOW password_encryption;` | Affiche l'algorithme de hachage (souvent `scram-sha-256` ou `md5`). | ## 3. Diagnostic des Connexions Actives Voir qui est connecté et ce qu'ils font : ```sql SELECT pid, usename, client_addr, state, query FROM pg_stat_activity WHERE state != 'idle'; ``` Voir les connexions bloquées : ```sql SELECT pid, usename, query FROM pg_stat_activity WHERE wait_event_type = 'Lock'; ``` ## 4. Logs des Requêtes SQL (serveur PostgreSQL) Pour voir les requêtes exécutées, les logs sont **sur le serveur PostgreSQL** (pas sur la machine Medusa). ### 4.1 Activer les logs de requêtes Dans `postgresql.conf` : ```text # Log complet (verbeux) log_statement = 'all' # Option moins verbeuse : toutes les requêtes lentes log_min_duration_statement = 0 ``` Recharger la configuration : ```sql SELECT pg_reload_conf(); ``` ### 4.2 Savoir où les logs sont écrits ```sql SHOW log_directory; SHOW log_filename; SHOW logging_collector; ``` ### 4.3 Requête utile (statistiques) Si `pg_stat_statements` est activé : ```sql SELECT query, calls, total_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20; ``` ### 4.4 Voir les logs au niveau systeme Sur le serveur PostgreSQL : ```bash # Journal systemd (Debian/Ubuntu) sudo journalctl -u postgresql -n 200 --no-pager # Suivre les logs en temps reel (systemd) sudo journalctl -u postgresql -f ``` Si les logs sont ecrits dans des fichiers (selon config) : ```bash # Chemin exact indique par SHOW log_directory / log_filename sudo ls -lah /var/log/postgresql/ sudo tail -n 200 /var/log/postgresql/postgresql-*.log sudo tail -f /var/log/postgresql/postgresql-*.log ``` ## 5. Gestion des Mots de Passe Si vous avez un doute sur un mot de passe ou une méthode de chiffrement (md5 vs scram), la meilleure solution est de le redéfinir : ```sql -- Réinitialiser le mot de passe ALTER USER nom_utilisateur WITH PASSWORD 'nouveau_mot_de_passe'; ``` ## 6. Problèmes Courants `pg_hba.conf` Si vous avez l'erreur `no pg_hba.conf entry for host...`, vérifiez le fichier `pg_hba.conf`. 1. Ouvrir le fichier (chemin obtenu via `SHOW hba_file;`). 2. Vérifier la présence d'une ligne comme : ```text # TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 scram-sha-256 ``` 3. **IMPORTANT** : Après toute modification, recharger la config : ```bash sudo systemctl reload postgresql ``` ## 7. Medusa - Tables concernées par des actions courantes ### 6.1 Création d'un compte client (storefront) Tables généralement impactées : - `customer` - `customer_address` (si une adresse est fournie) - `customer_group_customer` (si le client est rattaché à un groupe) Requêtes SQL utiles : ```sql -- Voir les tables clientes disponibles \dt customer* -- Consulter les derniers clients SELECT id, email, created_at FROM customer ORDER BY created_at DESC LIMIT 20; -- Adresses des clients (si table présente) SELECT id, customer_id, address_1, city, country_code, created_at FROM customer_address ORDER BY created_at DESC LIMIT 20; -- Appartenance a un groupe (si table presente) SELECT customer_id, customer_group_id FROM customer_group_customer LIMIT 20; ``` ### 6.2 Passage d'une commande Tables généralement impactées : - `cart` - `line_item` (ou `cart_line_item` selon version) - `order` - `order_item` - `payment` / `payment_session` - `fulfillment` / `shipment` - `address` (billing / shipping) Requêtes SQL utiles : ```sql -- Derniers paniers SELECT id, email, region_id, created_at, completed_at FROM cart ORDER BY created_at DESC LIMIT 20; -- Lignes de panier / lignes de commande (selon version) SELECT id, cart_id, order_id, title, quantity, unit_price, created_at FROM line_item ORDER BY created_at DESC LIMIT 20; -- Dernieres commandes SELECT id, status, fulfillment_status, payment_status, total, created_at FROM "order" ORDER BY created_at DESC LIMIT 20; -- Details d'items de commande SELECT id, order_id, title, quantity, unit_price, created_at FROM order_item ORDER BY created_at DESC LIMIT 20; -- Paiements / sessions de paiement SELECT id, order_id, provider_id, amount, created_at FROM payment ORDER BY created_at DESC LIMIT 20; SELECT id, cart_id, provider_id, amount, status, created_at FROM payment_session ORDER BY created_at DESC LIMIT 20; -- Fulfillment / shipments SELECT id, order_id, status, created_at FROM fulfillment ORDER BY created_at DESC LIMIT 20; SELECT id, fulfillment_id, tracking_number, created_at FROM shipment ORDER BY created_at DESC LIMIT 20; -- Adresses de facturation / livraison SELECT id, order_id, customer_id, address_1, city, country_code, created_at FROM address ORDER BY created_at DESC LIMIT 20; ```