Adaptateur PostgreSQL
L'adaptateur PostgreSQL permet d'utiliser Noria avec une base de données PostgreSQL existante — idéal pour les pipelines de production, les entrepôts de données mutualisés, ou la migration depuis un ETL classique.
Installation
Configuration
database:
dialect: postgresql
host: localhost # ou adresse du serveur
port: 5432 # port par défaut PostgreSQL
database: mon_entrepot # nom de la base
user: noria_user
password: "${DB_PASSWORD}" # depuis .noria/.env
schema: public # schéma par défaut (optionnel)
Avec une URL de connexion
Tu peux aussi utiliser une variable d'environnement contenant l'URL complète en passant par options :
Sécurité
Ne jamais stocker le mot de passe en clair dans noria.yml. Utilise toujours .noria/.env :
# .noria/.env (ajouté dans .gitignore)
DB_HOST=pg.mycompany.internal
DB_USER=noria_prod
DB_PASSWORD=s3cr3t
DB_NAME=entrepot_prod
database:
dialect: postgresql
host: "${DB_HOST}"
database: "${DB_NAME}"
user: "${DB_USER}"
password: "${DB_PASSWORD}"
Macros spécifiques PostgreSQL
| Macro | Résultat PostgreSQL |
|---|---|
{{ cast('col', 'TEXT') }} |
col::TEXT |
{{ cast('col', 'INTEGER') }} |
col::INTEGER |
{{ date_trunc('month', 'col') }} |
DATE_TRUNC('month', col) |
{{ current_timestamp() }} |
NOW() |
{{ concat('a', 'b') }} |
CONCAT(a, b) |
{{ to_char('col', 'YYYY-MM') }} |
TO_CHAR(col, 'YYYY-MM') |
Syntaxe :: pour le cast
L'adaptateur PostgreSQL utilise la syntaxe native col::TYPE pour le cast — plus idiomatique et légèrement plus performante.
Schémas PostgreSQL
Noria crée automatiquement les schémas manquants via CREATE SCHEMA IF NOT EXISTS. Tu n'as pas besoin de les créer manuellement.
Fonctionnalités SQL PostgreSQL utiles
-- Générer des séries de dates
SELECT generate_series(
'2024-01-01'::DATE,
'2024-12-31'::DATE,
INTERVAL '1 month'
)::DATE AS mois
-- JSON
SELECT
data->>'nom' AS nom,
(data->>'age')::INT AS age
FROM clients_json
-- Tableaux
SELECT UNNEST(tags) AS tag FROM articles
-- Fonctions fenêtre (identiques à DuckDB)
SELECT
client_id,
ROW_NUMBER() OVER (PARTITION BY region ORDER BY ca DESC) AS rang
FROM stats
Pool de connexions
Noria utilise SQLAlchemy avec pool_pre_ping=True pour PostgreSQL — les connexions inactives sont vérifiées avant usage, ce qui évite les erreurs après une longue période d'inactivité.
Limitations
- Seeds : les seeds utilisent les fonctions DuckDB (
read_csv_auto, etc.). Pour charger un fichier en PostgreSQL, utilise un seed DuckDB intermédiaire puis copie vers PostgreSQL, ou charge directement avecCOPY FROMdans un pre_hook. - Transactions : Noria exécute chaque tâche dans sa propre transaction implicite.