Skip to content
GitHubXDiscordRSS

Database

Learn how to create, configure, and manage PlanetScale serverless MySQL and PostgreSQL databases using Alchemy.

The Database resource lets you create and manage PlanetScale databases with comprehensive configuration options for scaling, migrations, and security. PlanetScale supports both MySQL and PostgreSQL databases.

Create a basic MySQL database with default settings:

import { Database } from "alchemy/planetscale";
const database = await Database("my-app-db", {
name: "my-app-db",
organization: "my-org",
clusterSize: "PS_10",
});

There are multiple ways to set the organization for a database.

Using OrganizationRef:

import { OrganizationRef, Database } from "alchemy/planetscale";
const organization = await OrganizationRef("my-org");
const database = await Database("my-app-db", {
organization,
name: "my-app-db",
clusterSize: "PS_10",
});

Using the PLANETSCALE_ORGANIZATION environment variable. This is the default behavior if no organization is provided:

import { Database } from "alchemy/planetscale";
const database = await Database("my-app-db", {
name: "my-app-db",
organization: alchemy.env.PLANETSCALE_ORGANIZATION,
clusterSize: "PS_10",
});

By default, when a database is deleted, the database will be removed from the state but not deleted via API. This is to prevent accidental loss of data. This setting can be changed by setting the delete property to true.

import { Database } from "alchemy/planetscale";
const database = await Database("my-app-db", {
name: "my-app-db",
organization: alchemy.env.PLANETSCALE_ORGANIZATION,
clusterSize: "PS_10",
delete: true,
});

Create a PostgreSQL database:

import { Database } from "alchemy/planetscale";
const pgDatabase = await Database("my-pg-db", {
name: "my-pg-db",
organization: "my-org",
clusterSize: "PS_10",
kind: "postgresql",
});

Create a database in a specific region with custom settings:

import { Database } from "alchemy/planetscale";
const database = await Database("eu-app-db", {
name: "eu-app-db",
organization: "my-org",
region: {
slug: "eu-west",
},
clusterSize: "PS_20",
allowDataBranching: true,
automaticMigrations: true,
requireApprovalForDeploy: true,
});

Production Database with Advanced Features

Section titled “Production Database with Advanced Features”

Create a production database with comprehensive configuration:

import { Database } from "alchemy/planetscale";
const prodDatabase = await Database("production-db", {
name: "production-db",
organization: "my-org",
region: {
slug: "us-east",
},
clusterSize: "PS_40",
defaultBranch: "production",
allowDataBranching: true,
automaticMigrations: false,
requireApprovalForDeploy: true,
restrictBranchRegion: true,
insightsRawQueries: true,
productionBranchWebConsole: false,
migrationFramework: "rails",
migrationTableName: "schema_migrations",
});

Create a database using a specific API key:

import { Database } from "alchemy/planetscale";
const database = await Database("custom-auth-db", {
name: "custom-auth-db",
organization: "my-org",
clusterSize: "PS_10",
apiKey: alchemy.secret(process.env.CUSTOM_PLANETSCALE_TOKEN),
});

Create a PostgreSQL database with ARM architecture:

import { Database } from "alchemy/planetscale";
const armDatabase = await Database("arm-pg-db", {
name: "arm-pg-db",
organization: "my-org",
clusterSize: "PS_10",
kind: "postgresql",
arch: "arm",
});

Adopt an existing PlanetScale database for management:

import { Database } from "alchemy/planetscale";
const existingDatabase = await Database("existing-db", {
name: "existing-db",
organization: "my-org",
clusterSize: "PS_20",
adopt: true,
allowDataBranching: false,
automaticMigrations: true,
});