> For the complete documentation index, see [llms.txt](https://academy.cegedim.cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://academy.cegedim.cloud/francais/bases-de-donnees/postgresql/postgresql-architecture.md).

# PostgreSQL - Architecture

## Architecture <a href="#postgresqlarchitecture-architecture" id="postgresqlarchitecture-architecture"></a>

### Versions prises en charge <a href="#postgresqlarchitecture-versionsprisesencharge" id="postgresqlarchitecture-versionsprisesencharge"></a>

Les versions de PostgreSQL actuellement supportées sont : 12, 13, 14, 15, 16, 17, 18.

### Mise à jour <a href="#postgresqlarchitecture-miseajour" id="postgresqlarchitecture-miseajour"></a>

Pour mettre à jour votre PaaS PostgreSQL, veuillez vous référer à cette page : [PostgreSQL - Mise à jour](/francais/bases-de-donnees/postgresql/postgresql-mise-a-jour.md)

### Topologies <a href="#postgresqlarchitecture-topologies" id="postgresqlarchitecture-topologies"></a>

**cegedim.cloud** prend en charge deux types de déploiements PostgreSQL :

* Le mode **Instance autonome** fournit une instance PostgreSQL standard.
* Le mode **Haute disponibilité** fournit un déploiement PostgreSQL multi-instances, avec des capacités de résilience et d'évolutivité améliorées.

### Régions et zones de disponibilité <a href="#postgresqlarchitecture-regions" id="postgresqlarchitecture-regions"></a>

PostgreSQL est disponible dans les deux Régions de **cegedim.cloud**, **EB** et **ET**. Chaque Région propose trois zones de disponibilité : **A**, **B** et **C**.

| Région | Zone de disponibilité | Centre de données                  |
| ------ | --------------------- | ---------------------------------- |
| **EB** | A                     | EB4 (Boulogne-Billancourt, France) |
| **EB** | B                     | EB3 (Boulogne-Billancourt, France) |
| **EB** | C                     | EB6 (Magny-les-Hameaux, France)    |
| **ET** | A                     | ET1 (Labège, France)               |
| **ET** | B                     | ET1 (Labège, France)               |
| **ET** | C                     | ET2 (Balma, France)                |

Lorsqu'une deuxième instance est déployée (haute disponibilité), les instances sont placées dans des zones de disponibilité différentes, toujours dans deux centres de données différents. Voir [Résilience](#postgresqlarchitecture-resilience).

### Résilience <a href="#postgresqlarchitecture-resilience" id="postgresqlarchitecture-resilience"></a>

Dans le cas d'une topologie à haute disponibilité, les deux instances sont toujours placées dans deux centres de données différents : le PaaS est donc résilient à la perte d'un centre de données.

Chaque instance se trouve dans une zone de disponibilité différente :

```mermaid
graph LR
    subgraph dc1["Centre de données 1"]
        subgraph az1["Zone de disponibilité"]
            n1["🐘 PostgreSQL"]
        end
    end
    subgraph dc2["Centre de données 2"]
        subgraph az2["Zone de disponibilité"]
            n2["🐘 PostgreSQL"]
        end
    end

    n1 <-->|Déploiement haute disponibilité| n2

    style dc1 fill:#e8e8e8,stroke:#000,stroke-width:2px,color:#000
    style dc2 fill:#e8e8e8,stroke:#000,stroke-width:2px,color:#000
    style az1 fill:#cfe2ff,stroke:#0066cc,stroke-width:2px,color:#000
    style az2 fill:#cfe2ff,stroke:#0066cc,stroke-width:2px,color:#000
    style n1 fill:#1abc9c,stroke:#0e6655,stroke-width:2px,color:#000
    style n2 fill:#1abc9c,stroke:#0e6655,stroke-width:2px,color:#000
```

* Sur **EB**, deux zones de disponibilité quelconques sont dans deux centres de données différents.
* Sur **ET**, les zones de disponibilité A et B sont toutes les deux dans ET1 : une instance est donc dans la zone C (ET2) et l'autre dans la zone A ou B (ET1).

### Diagramme de haute disponibilité <a href="#postgresqlarchitecture-diagrammedehautedisponibilite" id="postgresqlarchitecture-diagrammedehautedisponibilite"></a>

```mermaid
graph TD
    customer["👤 Client"]
    clusterip["🌐 IP du cluster"]

    subgraph dc1["Centre de données 1"]
        primary[("🗄️ Primaire")]
    end
    subgraph dc2["Centre de données 2"]
        replica[("🗄️ Réplique")]
    end

    customer -->|Protocole PostgreSQL tcp 5432| clusterip
    clusterip --> primary
    clusterip -.->|Bascule| replica
    primary <-->|Réplication en flux| replica

    style customer fill:#1abc9c,stroke:#0e6655,stroke-width:2px,color:#000
    style clusterip fill:#dde8f5,stroke:#000,stroke-width:2px,color:#000
    style dc1 fill:#e8e8e8,stroke:#000,stroke-width:2px,color:#000
    style dc2 fill:#e8e8e8,stroke:#000,stroke-width:2px,color:#000
    style primary fill:#1abc9c,stroke:#0e6655,stroke-width:2px,color:#000
    style replica fill:#e8820c,stroke:#a85a00,stroke-width:2px,color:#000
```

### Fonctionnalités <a href="#postgresqlarchitecture-features" id="postgresqlarchitecture-features"></a>

Cette section énumère les fonctionnalités disponibles pour le client, ainsi que la manière de les demander ou de les exécuter :

<table data-header-hidden><thead><tr><th width="176"></th><th></th></tr></thead><tbody><tr><td><strong>Libre-service</strong></td><td>Le client peut effectuer une action de manière autonome.</td></tr><tr><td><strong>Sur requête</strong></td><td>Le client peut demander que l'action soit effectuée auprès de l'équipe de support de cegedim.cloud.</td></tr></tbody></table>

<table data-full-width="true"><thead><tr><th width="323">Fonctionnalité</th><th width="153" data-type="checkbox">Libre-service</th><th width="135.5" data-type="checkbox">Sur requête</th><th>Commentaires</th></tr></thead><tbody><tr><td>Accès SSH</td><td>false</td><td>false</td><td>L'accès SSH est désactivé et réservé aux administrateurs de <strong>cegedim.cloud</strong>.</td></tr><tr><td>Modifier le fichier de configuration</td><td>false</td><td>true</td><td>Sur demande via un ticket. Seulement possible si cela n'affecte pas la supervision et la résilience.</td></tr><tr><td>Installer une extension</td><td>true</td><td>false</td><td>Les extensions PostgreSQL autorisées sont installables en libre-service par les utilisateurs depuis ITCare à partir de la version 15 et supérieure. Autrement, une demande via un ticket requête reste nécessaire.</td></tr></tbody></table>

## Extensions

Il est possible d'ajouter des fonctionnalités à PostgreSQL à travers ce qu'on appelle des extensions. Ces extensions peuvent ajouter de nouveaux types, des fonctions supplémentaires aussi bien pour les administrateurs que pour des utilisateurs "classiques", voire même des applications complètes.

Certaines de ces extensions sont développées au sein même du projet PostgreSQL et suivent donc les évolutions des différentes version de PostgreSQL. Vous pouvez en trouver la liste [ici](https://www.postgresql.org/docs/18/contrib.html).

D'autres sont développées par des entreprises tierces et suivent leur propre rythme à l'instar de [Timescaledb](https://docs.timescale.com/) ou de [Postgis](https://postgis.net/) pour ne citer que les plus connues.

Une fois que le PaaS PostgreSQL 15 et supérieur a été provisionné, vous pouvez installer certaines de ces extensions à travers ITCare.

Ci-dessous la liste des extensions supportées par le PaaS PostgreSQL à partir de la version 15:

* [btree\_gist](https://www.postgresql.org/docs/current/contrib.html)
* [citext](https://www.postgresql.org/docs/current/contrib.html)
* [fuzzystrmatch](https://www.postgresql.org/docs/current/contrib.html)
* [hstore](https://www.postgresql.org/docs/current/contrib.html)
* [pg\_trgm](https://www.postgresql.org/docs/current/contrib.html)
* [pgcrypto](https://www.postgresql.org/docs/current/contrib.html)
* [postgis](https://postgis.net/)
* [tablefunc](https://www.postgresql.org/docs/current/contrib.html)
* [timescaledb](https://docs.timescale.com/)
* [unaccent](https://www.postgresql.org/docs/current/contrib.html)
* [uuid-ossp](https://www.postgresql.org/docs/current/contrib.html)
* [vector](https://github.com/pgvector/pgvector)
* [postgres\_fdw](https://www.postgresql.org/docs/current/contrib.html)
* [oracle\_fdw](https://github.com/laurenz/oracle_fdw)

{% hint style="warning" %}
L'installation de certaines extensions peut nécessiter un redémarrage de PostgreSQL et donc entraîner une indisponibilité de votre PaaS PostgreSQL.
{% endhint %}

## Sécurité <a href="#postgresqlarchitecture-securite" id="postgresqlarchitecture-securite"></a>

### Authentification <a href="#postgresqlarchitecture-authentification" id="postgresqlarchitecture-authentification"></a>

Le client se voit attribuer un rôle nommé **admin**, dont il choisit le mot de passe.

Le mot de passe de cet utilisateur n'est pas stocké ni sauvegardé par **cegedim.cloud**. Veillez à l'enregistrer dans votre propre coffre-fort.

### Autorisations <a href="#postgresqlarchitecture-autorisations" id="postgresqlarchitecture-autorisations"></a>

Le rôle fourni au client dispose des autorisations suivantes :

* LOGIN
* CREATEROLE
* CREATEDB

Ainsi, le client peut créer un rôle d'application et des bases de données dédiées.

### Transport sécurisé <a href="#postgresqlarchitecture-transportsecurise" id="postgresqlarchitecture-transportsecurise"></a>

Le transport sécurisé est une option lors du provisionnement et n'est disponible qu'à partir de la version 13.

Si le transport sécurisé est sélectionné, TLS/SSL sera activé pour le protocole PostgreSQL et seule une connexion TLS des clients sera acceptée.

### Emplacement des données <a href="#postgresqlarchitecture-emplacementdesdonnees" id="postgresqlarchitecture-emplacementdesdonnees"></a>

Toutes les données sont stockées dans les centres de données **cegedim.cloud** sur des baies de stockage cryptées.

### Mots de passe <a href="#postgresqlarchitecture-motsdepasse" id="postgresqlarchitecture-motsdepasse"></a>

Cette section énumère la gestion des mots de passe :

<table data-full-width="true"><thead><tr><th width="233">Mot de passe</th><th width="237" data-type="checkbox">Stocké par cegedim.cloud</th><th width="181" data-type="checkbox">Stocké par le client</th><th width="99.19999999999999" data-type="checkbox">Imposé</th><th>Algorithme de Hash</th></tr></thead><tbody><tr><td>compte <strong>client dédié</strong></td><td>false</td><td>true</td><td>false</td><td>SCRAM-SHA-256</td></tr><tr><td><strong>TOUT</strong> autre compte</td><td>false</td><td>true</td><td>false</td><td>SCRAM-SHA-256</td></tr><tr><td>compte <strong>cegedim.cloud</strong></td><td>true</td><td>false</td><td>true</td><td>SCRAM-SHA-256</td></tr><tr><td>compte de <strong>supervision</strong></td><td>true</td><td>false</td><td>true</td><td>SCRAM-SHA-256</td></tr></tbody></table>

## Sauvegarde <a href="#postgresqlarchitecture-sauvegarde" id="postgresqlarchitecture-sauvegarde"></a>

Si la sauvegarde est activée lors du provisionnement (activée par défaut pour un service de type Production), les politiques de sauvegarde suivantes s'appliquent :

* Sauvegarde complète une fois par semaine.
* Sauvegardes différentielles entre les deux.
* Les journaux de type Write-ahead (WAL) sont archivés.

Le Point-in-Time Recovery est pris en charge pendant 14 jours sur Object Storage.

## Supervision

Dans le cadre de notre offre de bases de données gérées, PostgreSQL fait l'objet d'une supervision spécifique au-dessus du système sous-jacent afin de garantir la disponibilité et les performances du service.

Les indicateurs clés PostgreSQL suivants sont surveillés et suivis :

* Connexions
* Utilisation de la mémoire
* Dépassement des IDs de transactions (TXID wraparound)
* État de santé


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://academy.cegedim.cloud/francais/bases-de-donnees/postgresql/postgresql-architecture.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
