JSON
@@ -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 n’est pas directement saisie par l’utilisateur, mais obtenue à partir d’une expression basée sur d’autres 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 à l’insertion 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 s’en occupe.
|
||||
- La valeur est stockée → plus rapide à lire, mais prend de la place.
|
||||
|
||||
### Colonnes calculées via de vues
|
||||
|
||||
Si l’on 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 n’est pas stocké → il est recalculé à chaque requête.
|
||||
Moins d’espace disque, mais peut être plus lent si beaucoup de calculs.
|
||||
|
||||
Dans d’autres 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 d’imposer une condition (une règle logique) sur les valeurs d’une colonne ou d’un 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
|
||||
);
|
||||
```
|
||||
|
||||
2
Home.md
@@ -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 l’un 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)
|
||||