JSON

2025-09-08 09:05:02 +02:00
parent d2a96d0b8a
commit 62f782f28e
8 changed files with 93 additions and 5 deletions

@@ -21,3 +21,70 @@ La fonction `ST_Length(geom)` est STABLE car pour une même géométrie, la long
#### VOLATILE
Le résultat peut changer même dans une seule requête. Par exemple : `random()` ou `now()` donnent des résultats différents à chaque appel.
## Colonnes calculées
> Une colonne calculée (ou dérivée) est une colonne dont la valeur nest pas directement saisie par lutilisateur, mais obtenue à partir dune expression basée sur dautres colonnes de la même table.
### Colonnes générées
Il est possible de déclarer une colonne comme générée automatiquement et stockée. La valeur est calculée à linsertion ou mise à jour et enregistrée physiquement dans la table.
```sql
CREATE TABLE commande (
id SERIAL PRIMARY KEY,
prix_unitaire NUMERIC(10,2),
quantite INTEGER,
total NUMERIC(10,2) GENERATED ALWAYS AS (prix_unitaire * quantite) STORED
);
```
- total est calculé automatiquement.
- On ne peut pas insérer ou modifier total directement, PostgreSQL sen occupe.
- La valeur est stockée → plus rapide à lire, mais prend de la place.
### Colonnes calculées via de vues
Si lon ne veut pas stocker la valeur (pour éviter la redondance), on peut utiliser une vue.
```sql
CREATE VIEW commande_calculee AS
SELECT id,
prix_unitaire,
quantite,
prix_unitaire * quantite AS total
FROM commande;
```
ci total nest pas stocké → il est recalculé à chaque requête.
Moins despace disque, mais peut être plus lent si beaucoup de calculs.
Dans dautres SGBD (MySQL, Oracle), il existe des colonnes générées virtuelles (calculées à la volée sans stockage).
## Vérification
> Une contrainte CHECK permet dimposer une condition (une règle logique) sur les valeurs dune colonne ou dun ensemble de colonnes.
On peut définir une contrainte CHECK :
au niveau colonne
```sql
CREATE TABLE employe (
id SERIAL PRIMARY KEY,
nom TEXT NOT NULL,
age INT CHECK (age >= 18) -- contrainte sur une seule colonne
);
```
au niveau table (plusieurs colonnes possibles)
```sql
CREATE TABLE commande (
id SERIAL PRIMARY KEY,
prix_unitaire NUMERIC(10,2),
quantite INT,
CHECK (prix_unitaire >= 0 AND quantite > 0) -- règle sur plusieurs colonnes
);
```

@@ -6,9 +6,11 @@
- [Sous requêtes](sousrequete.md)
- [Vues et fonctions](View.md)
- [Fonctions de fenêtrage](window.md)
- [Colonnes calculées](Calculated.md)
- [Intervalles](intervalle.md)
- [Arbres](Arbres.md)
- [Données spatiales](Spatial.md)
- [Données JSON](json.md)
## Exercices

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="400" height="300" viewBox="0 0 800 600" version="1.1">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="300" height="225" viewBox="0 0 800 600" version="1.1">
<g style="stroke:#000000;stroke-width:4">
<path style="fill:#f00;" d="m 348.5301,292.16164 c 0,-54.25306 21.33532,-103.52299 56.13833,-139.99391 34.93487,36.25996 56.36165,85.62469 56.36165,139.99391 0,54.20576 -21.29814,103.43708 -56.02381,140.01839 C 370.01352,396.02597 348.5301,346.60266 348.5301,292.16164 z"/>
<path style="fill:#fff;" d="m 550.44376,494.66164 c 111.83766,0 202.5,-90.66234 202.5,-202.5 0,-111.83766 -90.66234,-202.500004 -202.5,-202.500004 -57.5846,0 -109.55528,24.036074 -146.36166,62.506094 34.93488,36.25996 56.36166,85.62469 56.36166,139.99391 0,54.20576 -21.29814,103.43708 -56.02382,140.01839 36.80788,38.6022 88.62718,62.48161 146.02382,62.48161 z"/>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="400" height="300" viewBox="0 0 800 600" version="1.1">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="300" height="225" viewBox="0 0 800 600" version="1.1">
<g style="stroke:#000000;stroke-width:4">
<path style="fill:#fff;" d="m 348.5301,292.16164 c 0,-54.25306 21.33532,-103.52299 56.13833,-139.99391 34.93487,36.25996 56.36165,85.62469 56.36165,139.99391 0,54.20576 -21.29814,103.43708 -56.02381,140.01839 C 370.01352,396.02597 348.5301,346.60266 348.5301,292.16164 z"/>
<path style="fill:#fff;" d="m 550.44376,494.66164 c 111.83766,0 202.5,-90.66234 202.5,-202.5 0,-111.83766 -90.66234,-202.500004 -202.5,-202.500004 -57.5846,0 -109.55528,24.036074 -146.36166,62.506094 34.93488,36.25996 56.36166,85.62469 56.36166,139.99391 0,54.20576 -21.29814,103.43708 -56.02382,140.01839 36.80788,38.6022 88.62718,62.48161 146.02382,62.48161 z"/>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="400" height="300" viewBox="0 0 800 600" version="1.1">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="300" height="225" viewBox="0 0 800 600" version="1.1">
<g style="stroke:#000000;stroke-width:4">
<path style="fill:#f00;" d="m 348.5301,292.16164 c 0,-54.25306 21.33532,-103.52299 56.13833,-139.99391 34.93487,36.25996 56.36165,85.62469 56.36165,139.99391 0,54.20576 -21.29814,103.43708 -56.02381,140.01839 C 370.01352,396.02597 348.5301,346.60266 348.5301,292.16164 z"/>
<path style="fill:#fff;" d="m 550.44376,494.66164 c 111.83766,0 202.5,-90.66234 202.5,-202.5 0,-111.83766 -90.66234,-202.500004 -202.5,-202.500004 -57.5846,0 -109.55528,24.036074 -146.36166,62.506094 34.93488,36.25996 56.36166,85.62469 56.36166,139.99391 0,54.20576 -21.29814,103.43708 -56.02382,140.01839 36.80788,38.6022 88.62718,62.48161 146.02382,62.48161 z"/>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="400" height="300" viewBox="0 0 800 600" version="1.1">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="300" height="225" viewBox="0 0 800 600" version="1.1">
<g style="stroke:#000000;stroke-width:4">
<path style="fill:#fff;" d="m 348.5301,292.16164 c 0,-54.25306 21.33532,-103.52299 56.13833,-139.99391 34.93487,36.25996 56.36165,85.62469 56.36165,139.99391 0,54.20576 -21.29814,103.43708 -56.02381,140.01839 C 370.01352,396.02597 348.5301,346.60266 348.5301,292.16164 z"/>
<path style="fill:#f00;" d="m 550.44376,494.66164 c 111.83766,0 202.5,-90.66234 202.5,-202.5 0,-111.83766 -90.66234,-202.500004 -202.5,-202.500004 -57.5846,0 -109.55528,24.036074 -146.36166,62.506094 34.93488,36.25996 56.36166,85.62469 56.36166,139.99391 0,54.20576 -21.29814,103.43708 -56.02382,140.01839 36.80788,38.6022 88.62718,62.48161 146.02382,62.48161 z"/>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="400" height="300" viewBox="0 0 800 600" version="1.1">
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="300" height="225" viewBox="0 0 800 600" version="1.1">
<g style="stroke:#000000;stroke-width:4">
<path style="fill:#f00;" d="m 348.5301,292.16164 c 0,-54.25306 21.33532,-103.52299 56.13833,-139.99391 34.93487,36.25996 56.36165,85.62469 56.36165,139.99391 0,54.20576 -21.29814,103.43708 -56.02381,140.01839 C 370.01352,396.02597 348.5301,346.60266 348.5301,292.16164 z"/>
<path style="fill:#f00;" d="m 550.44376,494.66164 c 111.83766,0 202.5,-90.66234 202.5,-202.5 0,-111.83766 -90.66234,-202.500004 -202.5,-202.500004 -57.5846,0 -109.55528,24.036074 -146.36166,62.506094 34.93488,36.25996 56.36166,85.62469 56.36166,139.99391 0,54.20576 -21.29814,103.43708 -56.02382,140.01839 36.80788,38.6022 88.62718,62.48161 146.02382,62.48161 z"/>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

19
json.md Normal file

@@ -0,0 +1,19 @@
# Données JSON
PostgreSQL est lun des premiers SGBD relationnels à avoir intégré un support avancé de JSON.
Il existe deux types principaux pour stocker du JSON :
- json → stocke du texte JSON brut, sans transformation.
- jsonb → stocke du JSON sous forme binaire, optimisée pour les recherches et comparaisons.
En pratique, on utilise jsonb presque tout le temps (plus rapide, indexable).
### Opérateurs principaux
-> : accès à un objet ou tableau (résultat = JSON/JSONB)
->> : accès à une valeur texte (résultat = TEXT)
#> : accès à un chemin (résultat = JSON/JSONB)
#>> : accès à un chemin (résultat = TEXT)