Add PostgreSQL to your Next.js app
A managed PostgreSQL for your Next.js app, created by your coding agent or two commands, backed up from the first minute.
Ask your agent
Create a PostgreSQL database for this Next.js app on Rowsafe Cloud and connect it with DATABASE_URL in .env.Your agent picks a size, tells you the price and waits for your yes. Then it creates the server as you and, once it's ready (5 to 10 minutes), puts DATABASE_URL in .env. Through the Claude Code or Codex plugin, you create the login in the dashboard instead and paste it in: the password is made in your browser.
First time? Connect Rowsafe to your agent once.
Or from the terminal
rowsafe cloud create shop-db --wait
rowsafe env --on shop-dbrowsafe cloud create shows the price and asks first. rowsafe env makes the password on your computer, writes DATABASE_URL to .env and adds .env to .gitignore. Rowsafe never sees it.
Connect your app
import { Pool } from "pg";
// One pool, kept across hot reloads in development.
const g = globalThis as unknown as { pool?: Pool };
export const db = (g.pool ??= new Pool({ connectionString: process.env.DATABASE_URL }));import { db } from "@/lib/db";
export default async function Page() {
const { rows } = await db.query("SELECT id, title FROM posts ORDER BY id DESC LIMIT 10");
return <ul>{rows.map((p) => <li key={p.id}>{p.title}</li>)}</ul>;
}npm install pg @types/pg. In .env, change sslmode=require to sslmode=verify-full: the server's certificate is then checked too. Next.js loads .env by itself. Use the pool in server code only. Prisma and Drizzle take the same DATABASE_URL.
Backups and restores
Rowsafe backs up every change, encrypted on the server with a key only you have, so you can restore to any second. Every week it restores a backup to prove it works. Restore a copy, bring back deleted rows or rewind the whole database, in one click. Before a risky change, save a Mark (rowsafe mark), or let your agent save one.
From $0.014 an hour, never more than $10 a month.
Questions
Does it work on Vercel?
Yes. Vercel has no fixed addresses, so allow everyone: rowsafe cloud allow shop-db 0.0.0.0/0. Anyone can then try to connect, but they still need the password, and every connection is encrypted. Many functions at once? Turn on connection pooling and use its connection string.
How does my app's server connect?
At first only your computer can. Add your server's address under Who can connect on the server's page, or run rowsafe cloud allow shop-db ADDRESS.
Can I move my data from Supabase, Neon, RDS or Heroku?
Yes, with Move in: it copies your database while your app keeps running (from Heroku, writes pause during the copy). How it works
More guides
- Managed MySQL for your Laravel appLaravel, MySQL 8.4
- Managed PostgreSQL for your Django appDjango, psycopg
- Managed PostgreSQL for your Rails appRuby on Rails, pg
- PostgreSQL for your Express app, with PrismaNode.js, Express, Prisma
- PostgreSQL for your FastAPI app, with SQLAlchemyFastAPI, SQLAlchemy, psycopg
- PostgreSQL with pgvector for your AI apppgvector, any framework
- A Valkey (Redis) cache for your Next.js appNext.js, node-redis
- Meilisearch for your Laravel app, with ScoutLaravel Scout, Meilisearch
- Managed MariaDB for your WordPress siteWordPress, MariaDB 11.8