> ## Documentation Index
> Fetch the complete documentation index at: https://infra-docs.kaeyros.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Créer une nouvelle base PostgreSQL

> Étapes pour déclarer un cluster PostgreSQL via l'opérateur Zalando et le référencer depuis les values de votre application.

Cette page décrit la procédure pour créer une nouvelle base PostgreSQL sur la plateforme, via l'opérateur Zalando (postgres-operator). Le dossier `databases/` n'est pas synchronisé par ArgoCD : les manifestes doivent être appliqués manuellement.

## Le manifeste

Voici un manifeste type pour créer un cluster PostgreSQL. Adaptez le nom, le namespace et la taille de volume selon vos besoins.

```yaml databases/mon-appli-prod.yaml theme={null}
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
  name: monappliprod
  namespace: mon-produit           # ← à ne pas oublier
spec:
  teamId: acid
  numberOfInstances: 1
  postgresql:
    version: "17"
  volume:
    size: 8Gi
    storageClass: local-path
  enableLogicalBackup: true
  logicalBackupSchedule: "0 0 * * *"
```

> [!WARNING]
>
> Sans `metadata.namespace`, la base est créée dans le namespace courant du contexte (souvent `default`). C'est l'origine de bases mal placées.

## Convention de nommage

> [!NOTE]
>
> Le nom du cluster s'écrit sans séparateur, suffixé par l'environnement. Par exemple : `oimdashboardapiprod`, `precomputepointagestg`. Le pod correspondant s'appellera `<nom>-0`.

## Appliquer

**1. Créer le manifeste**

Placez-le dans `databases/<nom>.yaml` du dépôt argo-production.

**2. L'appliquer manuellement**

```bash theme={null}
kubectl apply -f databases/<nom>.yaml
```

Ce dossier N'EST PAS synchronisé par ArgoCD.

**3. Vérifier**

```bash theme={null}
kubectl get postgresql -n <ns>
kubectl -n <ns> exec <cluster>-0 -- patronictl list
```

**4. Récupérer les identifiants**

L'opérateur crée des Secrets nommés `<utilisateur>.<cluster>.credentials.postgresql.acid.zalan.do`.

## Référencer depuis une application

Pour injecter le mot de passe dans votre application, référencez le Secret généré dans votre fichier `values.yaml` :

```yaml Extrait de values theme={null}
env:
  - name: DATABASE_PASSWORD
    valueFrom:
      secretKeyRef:
        name: monappli.monappliprod.credentials.postgresql.acid.zalan.do
        key: password
```

## Précautions

> [!WARNING]
>
> La classe `local-path` attache le volume à un nœud précis. Ces bases ne sont pas répliquées par Longhorn. Voir /infrastructure/stockage-local-path.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.