<!--

Les sources et discussions pour ces sujets sont :

* Allow adding the connection service name to the psql prompt or access it via
  psql variable (Michael Banck) §

  - https://postgr.es/c/477728b5d
  - https://postgr.es/m/6723c612.050a0220.1567f4.b94a@mx.google.com

* Add psql option to use expanded mode on all list commands (Dean Rasheed) §

  - Adding 'x' enables this.
  - https://postgr.es/c/00f4c2959
  - https://postgr.es/m/CAEZATCVXJk3KsmCncf7PAVbxdDAUDm3QzDgGT7mBYySWikuOYw@mail.gmail.com

* Change psql's \conninfo to use tabular format and include more information
  (Álvaro Herrera, Maiquel Grassi, Hunaid Sohail) §

  - https://postgr.es/c/bba2fbc62
  - https://postgr.es/m/CP8P284MB24965CB63DAC00FC0EA4A475EC462@CP8P284MB2496.BRAP284.PROD.OUTLOOK.COM

* Add function's leakproof indicator to psql's \df+, \do+, \dAo+, and \dC+
  outputs (Yugo Nagata) §

  - https://postgr.es/c/2355e5111
  - https://postgr.es/m/20240701220817.483f9b645b95611f8b1f65da%40sranhm.sraoss.co.jp

* Add access method details for partitioned relations in \dP+ (Justin Pryzby) §

  - https://postgr.es/c/978f38c77
  - reference: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=374c7a229042
  - https://postgr.es/m/ZkyivySXnbvOogZz@pryzbyj2023

* Add "default_version" to the psql \dx extension output (Magnus Hagander) §

  - https://postgr.es/c/d696406a9
  - https://postgr.es/m/CABUevEyTMyXC6OvCWkj+rPnHrfi8_Rw_+DD_jzgFFNPqgf+Oig@mail.gmail.com

* Add psql variable WATCH_INTERVAL to set the default \watch wait time (Daniel
  Gustafsson) §

  - https://postgr.es/c/1a759c832
  - https://postgr.es/m/B2FD26B4-8F64-4552-A603-5CC3DF1C7103@yesql.se

-->

<div class="slide-content">

  * Nom de service :
    - `%s` : nouvelle variable de prompt
    - `SERVICE` : nouvelle variable d'environnement de `psql`
  * La plupart des métacommandes de liste ont désormais une option `\x`
  * `\conninfo` affiche désormais un tableau
  * Informations sur la caractéristique `leakproof` des fonctions, opérateurs et casts
  * `\dP+` affiche désormais la méthode d'accès associée à une table partitionnée
  * `\dx` affiche désormais la version par défaut des extensions
  * `\watch` : temps d'attente configurable avec `WATCH_INTERVAL`

</div>

<div class="notes">

**Prompt et nom de service** :

`psql` met désormais à disposition des variables qui permettent de connaître le service
en cours d'utilisation.

Avec ce fichier de service :

```default
[postgres@rocky9 ~]$ cat ~/pgservice.conf
[pg18]
dbname=postgres
user=benoit
port=5432
```

l'information du service est disponible dans le prompt via `%s` et dans les
scripts via la variable d'environnement `SERVICE` :

```default
[postgres@rocky9 ~]$ PGSERVICEFILE=~/pgservice.conf psql "service=pg18"
psql (18beta1)
Type "help" for help.

postgres=> \set PROMPT1 '%n@%/ (%s) %R%#%x '
benoit@postgres (pg18) => \echo service: :SERVICE
service: pg18
```

**Affichage étendu (`\x`) pour toutes les métacommandes** :

L'option `\x [on|off]` permet de basculer `psql` en affichage étendu,
c'est-à-dire avec les champs en ligne et non en colonne.

Elle est désormais directement intégrée aux métas commandes.
Voici un exemple avec `\dt` :

```default
postgres=# \dt
            List of tables
 Schema |   Name    | Type  |  Owner
--------+-----------+-------+----------
 public | t1        | table | postgres
 public | t2        | table | postgres
(3 rows)

postgres=# \dtx
List of tables
-[ RECORD 1 ]-----
Schema | public
Name   | t1
Type   | table
Owner  | postgres
-[ RECORD 2 ]-----
Schema | public
Name   | t2
Type   | table
Owner  | postgres
```

Cela fonctionne aussi si l'on veut les détails additionnels en ajoutant `+`.
D'ailleurs `\dt+x` et `\dtx+` renvoient la même chose.

La métacommande `\conninfo` affichait autrefois son résultat
sous forme d'une phrase avec seulement l'utilisateur,
l'hôte et le port.
Elle affiche désormais des informations plus complètes sous
forme de tableau :

```default
postgres=# \conninfo
         Connection Information
      Parameter       |      Value
----------------------+-----------------
 Database             | postgres
 Client User          | postgres
 Socket Directory     | /run/postgresql
 Server Port          | 5432
 Options              |
 Protocol Version     | 3
 Password Used        | false
 GSSAPI Authenticated | false
 Backend PID          | 30801
 TLS Connection       | false
 Superuser            | on
 Hot Standby          | off
(12 rows)
```

**Affichage de la caractéristique `leakproof` sur les fonctions** :

Une fonction dite `leakproof` ne risque pas de provoquer de fuites d’informations,
ce qui permet au planificateur de placer son évaluation au moment le plus
opportun pour diminuer les coûts. Nos manuels détaillent ce thème plus en
détail [ici](https://dali.bo/dba1_html#restreindre-les-droits).

Il est désormais possible de visualiser si une fonction est `leakproof` dans le mode
avancé (`+`) des méta commandes suivantes :

* `\df+` : liste des fonctions ;
* `\do+` : liste des opérateurs ;
* `\dAo+` : liste des familles d'opérateurs ;
* `\dC+` : liste des casts.

Voici un exemple avec la fonction `generate_series(bigint, bigint, bigint)` :

```default
postgres=# \dfx+ generate_series bigint bigint bigint
List of functions
-[ RECORD 1 ]-------+--------------------------------
Schema              | pg_catalog
Name                | generate_series
Result data type    | SETOF bigint
Argument data types | bigint, bigint, bigint
Type                | func
Volatility          | immutable
Parallel            | safe
Owner               | postgres
Security            | invoker
Leakproof?          | no
Access privileges   |
Language            | internal
Internal name       | generate_series_step_int8
Description         | non-persistent series generator
```

**Tables partitionnées et méthodes d'accès** :

La version 18 permet de spécifier la méthode d'accès d'une table partitionnée.

Voici un exemple avec la méthode d'accès `heap2` :

```default
postgres=# \dPx+ tpartaccess
List of partitioned relations
-[ RECORD 1 ]-+------------------
Schema        | public
Name          | tpartaccess
Owner         | postgres
Type          | partitioned table
Parent name   |
Table         |
Access method | heap2
Total size    | 0 bytes
Description   |
```

**Affichage de la version par défaut des extensions dans `\dx`** :

La méta commande `\dx` affiche désormais la version disponible sur l'OS, en plus
de celle installée dans PostgreSQL :

```default
postgres=# \dxx
List of installed extensions
-[ RECORD 1 ]---+-----------------------------
Name            | plpgsql
Version         | 1.0
Default version | 1.0
Schema          | pg_catalog
Description     | PL/pgSQL procedural language
```

L'objectif est de rendre plus visible un décalage de version nécessitant
l’exécution de `ALTER EXTENSION UPDATE`.

**Intervalle de rafraîchissement de `\watch`** :

L'intervalle de rafraîchissement de la métacommande `\watch` est modifiable
et consultable via la variable `WATCH_INTERVAL` ;

```sql
postgres=# \set WATCH_INTERVAL 0.1
postgres=# SELECT 'blip' \watch
Mon 21 Jul 2025 01:08:39 PM UTC (every 0.1s)

 ?column?
----------
 blip
(1 row)

postgres=# \set WATCH_INTERVAL 1
postgres=# SELECT 'blip' \watch
Mon 21 Jul 2025 01:10:17 PM UTC (every 1s)

 ?column?
----------
 blip
(1 row)
```

</div>
