diff --git a/apps/docs/content/docs/guides/postgres/meta.json b/apps/docs/content/docs/guides/postgres/meta.json index 0190566775..ec2afb889f 100644 --- a/apps/docs/content/docs/guides/postgres/meta.json +++ b/apps/docs/content/docs/guides/postgres/meta.json @@ -6,6 +6,7 @@ "flyio", "vscode", "idx", - "viewing-data" + "viewing-data", + "migrate-from-neon" ] } diff --git a/apps/docs/content/docs/guides/postgres/migrate-from-neon.mdx b/apps/docs/content/docs/guides/postgres/migrate-from-neon.mdx new file mode 100644 index 0000000000..9a41e188f4 --- /dev/null +++ b/apps/docs/content/docs/guides/postgres/migrate-from-neon.mdx @@ -0,0 +1,98 @@ +--- +title: Neon to Prisma Postgres +description: Learn how to migrate from Neon to Prisma Postgres +url: /guides/postgres/migrate-from-neon +metaTitle: Neon to Prisma Postgres +metaDescription: Learn how to migrate from Neon to Prisma Postgres. +--- + +This guide walks you through migrating data from Neon to Prisma Postgres using `pg_dump` and `pg_restore`. + +## Prerequisites + +- A Neon database connection URL +- A [Prisma Data Platform](https://console.prisma.io) account +- PostgreSQL CLI tools (`pg_dump`, `pg_restore`) version 17 + +:::info[Make sure your PostgreSQL tools match the Prisma Postgres version] + +Prisma Postgres runs PostgreSQL 17. Run `pg_dump --version` or `pg_restore --version` to confirm. + +::: + +## 1. Create a new Prisma Postgres database + +1. Log in to [Prisma Data Platform](https://console.prisma.io/) and open the Console. +1. In a [workspace](/console/concepts#workspace) of your choice, click **New project**. +1. Name your project, then click **Get started** under **Prisma Postgres**. +1. Select a region and click **Create project**. + +Once provisioned, get your direct connection string: + +1. Click the **API Keys** tab in your project's sidenav. +1. Click **Create API key**, give it a name, and click **Create**. +1. Copy the connection string starting with `postgres://` — you'll need this in step 3. + +## 2. Export data from Neon + +Copy a **non-pooled** connection string from Neon (disable **Connection pooling**) and ensure it includes `sslmode=require`: + +```text +postgresql://USER:PASSWORD@YOUR-NEON-HOST/DATABASE?sslmode=require +``` + +Then run the following command, replacing `$NEON_DATABASE_URL` with your actual Neon database URL: + +```bash +pg_dump \ + -Fc \ + -d "$NEON_DATABASE_URL" \ + -n public \ + -f neon_dump.bak +``` + +## 3. Import data into Prisma Postgres + +To restore, replace `$PRISMA_POSTGRES_DATABASE_URL` with your [direct connection string](/postgres/database/direct-connections) from step 1: + +```bash +pg_restore \ + --no-owner \ + --no-acl \ + -d "$PRISMA_POSTGRES_DATABASE_URL" \ + neon_dump.bak +``` + +The `--no-owner` and `--no-acl` flags skip Neon-specific role assignments that don't exist in Prisma Postgres. + +To validate the import, open [Prisma Studio](/docs/studio) from the **Studio** tab in your project, or run: + +```npm +npx prisma studio +``` + +## 4. Update your application + +### Already using Prisma ORM + +Update `DATABASE_URL` in your `.env` file: + +```text title=".env" +DATABASE_URL="postgres://USER:PASSWORD@db.prisma.io:5432/?sslmode=require" +``` + +Then regenerate Prisma Client: + +```npm +npx prisma generate +``` + +:::tip + +See the [Prisma ORM with Prisma Postgres quickstart](/prisma-orm/quickstart/prisma-postgres) for driver adapter configuration and best practices. + +::: + +### Not yet using Prisma ORM + +Follow [Add Prisma ORM to an existing project](/prisma-orm/add-to-existing-project/prisma-postgres) to introspect your database, generate a schema, and migrate your queries.