TL;DR
Quoi : Une plateforme MySQL serverless avec branching et modifications de schéma non-bloquantes.
Pourquoi : Branching style Git pour les bases de données, migrations sans interruption, scalabilité infinie.
Quick Start
Inscription : Allez sur planetscale.com et créez un compte.
Installer le CLI :
brew install planetscale/tap/pscale # macOS
# or
scoop install pscale # Windows
Créer une base de données :
pscale auth login
pscale database create myapp --region us-east
Se connecter :
pscale shell myapp main
Créer une table :
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE
);
Cheatsheet
| Commande | Description |
|---|---|
pscale database create name | Créer une base de données |
pscale shell db branch | Se connecter à une branche |
pscale branch create db name | Créer une branche |
pscale deploy-request create db branch | Créer une demande de déploiement |
pscale connect db branch | Proxy de connexion local |
pscale password create db branch name | Créer un mot de passe de connexion |
Gotchas
Workflow de branching
# Créer une branche de développement
pscale branch create myapp add-orders
# Se connecter à la branche
pscale shell myapp add-orders
# Faire des modifications de schéma
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
total DECIMAL(10,2)
);
# Créer une demande de déploiement
pscale deploy-request create myapp add-orders
# Déployer en production (via UI ou CLI)
pscale deploy-request deploy myapp 1
Chaînes de connexion
# Générer une chaîne de connexion
pscale password create myapp main production-password
# Utiliser dans l'application
DATABASE_URL="mysql://user:password@host/database?ssl=true"
Utilisation avec les frameworks
// Prisma
// schema.prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma" // Required for PlanetScale
}
// Drizzle
import { drizzle } from 'drizzle-orm/planetscale-serverless';
import { connect } from '@planetscale/database';
const connection = connect({
url: process.env.DATABASE_URL
});
const db = drizzle(connection);
Pas de clés étrangères (utiliser au niveau application)
// PlanetScale ne supporte pas les clés étrangères pour les migrations en ligne
// Gérer les relations dans le code applicatif
// Avec Prisma relationMode: "prisma"
model User {
id Int @id @default(autoincrement())
orders Order[]
}
model Order {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
}
Next Steps
- PlanetScale Documentation - Documentation officielle
- PlanetScale Tutorials - Ressources d’apprentissage
- Branching Guide - Workflow
- Prisma + PlanetScale - Intégration