Docs

Plugin PostgreSQL

Pousse ton schema PostgreSQL vers Panache pour audit RLS, audit des grants et detection de roles dangereux. Marche avec Drizzle, Prisma ou n'importe quel pg_dump.

Quand l'utiliser

Utilise @withpanache/postgres quand tu veux que Panache audite ton schema PostgreSQL : - Tables sans politique RLS dans un contexte multi-tenant. - GRANT trop larges. - Roles dangereux (SUPERUSER, BYPASSRLS, CREATEROLE) sur des comptes applicatifs. - Colonnes sensibles sans controle d'acces explicite. Marche depuis n'importe quelle CI/CD capable de produire un DDL : Drizzle (`drizzle-kit export`), Prisma (`prisma migrate diff`) ou un `pg_dump --schema-only` brut.

Installation

Ajoute le CLI en devDependency ou lance-le a la volee via npx :

npm install --save-dev @withpanache/postgres
# ou
pnpm add -D @withpanache/postgres

# A la volee, sans installation :
npx @withpanache/postgres push --from drizzle

Projet Drizzle

Auto-detecte un projet Drizzle en remontant l'arborescence a la recherche de `drizzle.config.{ts,js,mjs,cjs}` et de `drizzle-kit` dans package.json. Lance `drizzle-kit export --dialect=postgresql` et pousse la sortie.

export PANACHE_SITE_TOKEN=pnch_xxxxxxxx
npx @withpanache/postgres push --from drizzle

Projet Prisma

Auto-detecte un projet Prisma en remontant a la recherche de `prisma/schema.prisma` (ou `schema.prisma`) et de `prisma`/`@prisma/client` dans package.json. Lance `prisma migrate diff --from-empty --to-schema-datamodel <schema> --script` et pousse la sortie.

export PANACHE_SITE_TOKEN=pnch_xxxxxxxx
npx @withpanache/postgres push --from prisma

Fichier SQL brut

Passe `--schema <fichier>` pour lire le DDL depuis un fichier SQL. Utile pour les projets avec un `schema.sql` ecrit a la main, ou pour pousser un artefact `pg_dump` capture plus tot dans la pipeline.

npx @withpanache/postgres push --schema ./db/schema.sql

Pipe depuis stdin

Si ni `--from` ni `--schema` ne sont fournis, le CLI lit le DDL depuis stdin. Pattern recommande pour un `pg_dump` brut.

pg_dump --schema-only $DATABASE_URL | \
  npx @withpanache/postgres push --token $PANACHE_SITE_TOKEN

Limites

L'API d'ingest Panache impose une limite de 2 Mo sur le corps du DDL. Les schemas plus larges sont rejetes avec une erreur explicite. Si ton schema depasse, decoupe-le sur plusieurs sites ou ouvre une issue pour relever la limite. La feature schema doit etre activee dans le dashboard pour chaque site avant le premier push (Settings > Databases). Les pushes avant activation sont rejetes avec un 403.

Mode librairie

La meme logique est exposee en librairie TypeScript pour des pipelines custom ou des scripts Node :

import { pushSchema, generateSchemaFromDrizzle } from "@withpanache/postgres"

const schema = generateSchemaFromDrizzle(process.cwd())
if (!schema) throw new Error("pas de projet Drizzle")

const result = await pushSchema({
  token: process.env.PANACHE_SITE_TOKEN!,
  ddl: schema.ddl,
  metadata: {
    orm: "drizzle",
    ormVersion: schema.ormVersion,
    gitSha: process.env.GITHUB_SHA,
    branch: process.env.GITHUB_REF_NAME,
  },
})
if (!result.ok) console.error("push echoue :", result.error)

Toutes les options du CLI

La reference complete. Chaque flag a un equivalent variable d'environnement (PANACHE_*) — prefere les variables d'environnement en CI pour garder les tokens hors de `ps aux`.

panache-postgres push [options]

ENTREE (au choix)
  --schema <fichier>      Lire le DDL depuis un fichier SQL
  --from drizzle          Auto-detecter un projet Drizzle
  --from prisma           Auto-detecter un projet Prisma
  (stdin)                 Lire depuis stdin si aucun flag

AUTH
  --token <token>         Token du site (ou variable PANACHE_SITE_TOKEN)

METADATA
  --api-url <url>         Surcharger l'URL de l'API d'ingest
  --orm <name>            Label informatif ("drizzle", "prisma", "pg-dump")
  --git-sha <sha>         SHA du commit git
  --branch <name>         Nom de branche git
  --preview-url <url>     URL de deploiement preview

Codes de sortie

Le CLI utilise des codes de sortie distincts pour que les scripts CI puissent reagir correctement :

ExitSignification
0Success.
1Push failed (network, 4xx/5xx, validation).
2Invalid arguments or missing inputs.

Besoin d'aide ?

Pour toute question sur le plugin PostgreSQL ou si vous avez besoin d'assistance, contactez-nous a hello@withpanache.dev