stripe-sync-migrations
SKILL.md
Stripe Sync Engine Migrations
You are an expert in running and managing database migrations for stripe-sync-engine. Your goal is to help users set up the PostgreSQL schema required for syncing Stripe data.
Initial Assessment
Before proceeding, verify:
- Is stripe-sync-engine installed? If not, run the setup skill first.
- Is DATABASE_URL environment variable configured?
- Does the database user have permission to create schemas?
Running Migrations
Method 1: Create a Migration Script (Recommended)
Create scripts/run-migrations.ts:
import { runMigrations } from "stripe-sync-engine";
async function main() {
if (!process.env.DATABASE_URL) {
throw new Error("DATABASE_URL environment variable is not set");
}
console.log("Running Stripe sync engine migrations...");
await runMigrations({
databaseUrl: process.env.DATABASE_URL,
schema: "stripe",
tablePrefix: "",
migrationTableName: "stripe_migrations",
});
console.log("Migrations completed successfully");
}
main().catch((error) => {
console.error("Migration failed:", error);
process.exit(1);
});
Add to package.json:
{
"scripts": {
"stripe:migrate": "tsx scripts/run-migrations.ts"
}
}
Install tsx if needed:
npm install -D tsx
Run:
npm run stripe:migrate
Method 2: API Endpoint (For Serverless)
Create an API endpoint to trigger migrations:
Next.js App Router
Create app/api/migrations/run/route.ts:
import { runMigrations } from "stripe-sync-engine";
import { NextResponse } from "next/server";
export async function POST() {
if (!process.env.DATABASE_URL) {
return NextResponse.json(
{ error: "DATABASE_URL not configured" },
{ status: 500 }
);
}
try {
await runMigrations({
databaseUrl: process.env.DATABASE_URL,
schema: "stripe",
});
return NextResponse.json({ status: "migrated" });
} catch (error) {
const message = error instanceof Error ? error.message : "Unknown error";
return NextResponse.json({ error: message }, { status: 500 });
}
}
Hono
app.post('/migrations/run', async (c) => {
await runMigrations({ databaseUrl, schema: 'stripe' });
return c.json({ status: 'migrated' });
});
Migration Configuration Options
| Option | Type | Description |
|---|---|---|
databaseUrl |
string | PostgreSQL connection string |
schema |
string | Database schema name (default: stripe) |
tablePrefix |
string | Prefix for all table names (default: empty) |
migrationTableName |
string | Name of migrations tracking table (default: stripe_migrations) |
ssl |
object | SSL connection options |
logger |
Logger | Pino logger instance |
Verifying Migrations
After running migrations, verify the schema was created:
-- Check schema exists
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name = 'stripe';
-- List all created tables
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'stripe'
ORDER BY table_name;
-- Check migrations table
SELECT * FROM stripe.stripe_migrations ORDER BY id;
Tables Created
The migrations create these tables in the stripe schema:
| Table | Description |
|---|---|
customers |
Customer records |
products |
Product catalog |
prices |
Pricing information |
plans |
Legacy plan objects |
subscriptions |
Subscription records |
subscription_items |
Items within subscriptions |
invoices |
Invoice records |
invoice_line_items |
Line items on invoices |
charges |
Charge records |
payment_intents |
Payment attempts |
payment_methods |
Saved payment methods |
setup_intents |
Setup intent records |
refunds |
Refund records |
disputes |
Dispute records |
credit_notes |
Credit note records |
coupons |
Coupon records |
tax_ids |
Tax ID records |
Troubleshooting
Permission Denied
If you see permission errors:
-- Grant schema creation permission
GRANT CREATE ON DATABASE your_database TO your_user;
-- Or create schema manually first
CREATE SCHEMA IF NOT EXISTS stripe;
GRANT ALL ON SCHEMA stripe TO your_user;
PostgreSQL Version
stripe-sync-engine requires PostgreSQL 12+. Recommended: PostgreSQL 14+.
Check version:
SELECT version();
Connection Issues
Verify your connection string format:
postgresql://username:password@host:port/database?sslmode=require
For local development without SSL:
postgresql://username:password@localhost:5432/database
Related Skills
- setup: Install and configure stripe-sync-engine
- webhook: Set up webhook handlers after migrations
- troubleshooting: Debug migration and connection issues
Weekly Installs
17
Repository
ashutoshpw/stri…c-engineFirst Seen
Jan 21, 2026
Security Audits
Installed on
opencode15
gemini-cli15
codex14
claude-code14
cursor11
github-copilot11