Client psql

Note

Quelques possibilités si vous disposez d’une machine sur laquelle on peut installer psql et sur laquelle on peut établir des tunnels ssh

Installer

Documentation

Utiliser

Établissement d’un tunel SSH sur votre machine (ici sous Linux)

Remplacer id_ent par votre identifiant ENT dans la suite.

Saisissez votre mot de passe (attention : pas d’écho)

$ ssh id_ent@etu-pgsql.math.univ-paris-diderot.fr -L 5436:localhost:5432 -N
(id_ent@etu-pgsql.math.univ-paris-diderot.fr) Password for id_ent@etu-pgsql.math.univ-paris-diderot.fr:
$
Connexion au serveur PostGres, demander la liste des commandes disponibles

Utilisez votre tunnel SSH pour accéder au serveur PostGres. Dans une autre fenêtre terminal, lancer psql, saisissez à nouveau votre mot de passe.

$ psql -p 5436 -U id_ent -W -h localhost -d bd_2023-24
Password for id_ent: 

bd_2023-24=# \?  

Vous êtes maintenant dans une session sur le serveur PostGres. Vous êtes connecté au catalogue bd_2023-24

Vous pouvez utiliser une grande partie des commandes magiques de psql

Choisir un schéma par défaut (ici world)
bd_2023-24=# SET search_path TO world ;
SET
Lister les tables du schéma par défaut
bd_2023-24=# \d
+--------+-----------------+-------+-----------+
| Schema | Name            | Type  | Owner     |
|--------+-----------------+-------+-----------|
| world  | city            | table | boucheron |
| world  | country         | table | boucheron |
| world  | countrylanguage | table | boucheron |
+--------+-----------------+-------+-----------+
(3 rows)
Schéma d’une table
bd_2023-24=# \d city
 
+-------------+--------------+-----------+
| Column      | Type         | Modifiers |
|-------------+--------------+-----------|
| id          | integer      |  not null |
| name        | text         |  not null |
| countrycode | character(3) |  not null |
| district    | text         |  not null |
| population  | integer      |  not null |
+-------------+--------------+-----------+
Indexes:
    "city_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "city_country_fk" FOREIGN KEY (countrycode) REFERENCES country(countrycode) ON UPDATE CASCADE ON DELETE SET NULL DEFE>
Referenced by:
    TABLE "country" CONSTRAINT "country_capital_fkey" FOREIGN KEY (capital) REFERENCES city(id)
Informations de connexion
bd_2023-24=# \conninfo
You are connected to database "bd_2023-24" as user "id_end" on host "localhost"  (address "127.0.0.1") at port "5436".
Editer, sauvegarder et exécuter des requêtes
bd_2023-24=# \e 

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/nvim
  4. /usr/bin/vim.tiny
  5. /usr/bin/emacs
  6. /usr/bin/code
  7. /bin/ed
Choose 1-7 [1]: 6

Sous mon éditeur préféré (vs code ici), j’edite une requête

SELECT ci.name, co.name_country
FROM 
  world.city ci JOIN 
  world.country co ON (
    ci.countrycode=co.countrycode AND 
    ci.id = co.capital
  ) 
ORDER BY co.name_country;

sauvegardée dans un fichier de chemin d’accès /tmp/psql.edit.23866.sql (construit automatiquement)

Dans ma session sur bd_2023-24, je peux maintenant inclure et exécuter cette requête.

bd_2023-24=# \i /tmp/psql.edit.23866.sql
               name                |             name_country              
-----------------------------------+---------------------------------------
 Kabul                             | Afghanistan
 Tirana                            | Albania
 Alger                             | Algeria
 Fagatogo                          | American Samoa
 Andorra la Vella                  | Andorra
 Luanda                            | Angola
:
...

Entrez q pour sortir du pager

Un fichier par TP ?

Il est commode d’archiver le travail d’une séance de TP dans un fichier *.sql. On peut créer les fichiers avant la session ou en cours de session (ici dans un dialecte d’Unix)

bd_2023-24=# \! touch tp-x.sql
bd_2023-24=# -- editer tp-x.sql
bd_2023-24=# \e tp-x.sql 
bd_2023-24=# -- charger/exécuter tp-x.sql
bd_2023-24=# \i tp-x.sql

Renseignements utiles

Documentation psql)