从现有 PostgreSQL 数据库导入数据
本指南提供了将数据从现有 PostgreSQL 数据库导入到 Prisma Postgres 的分步说明。
您可以通过三个步骤完成此迁移
- 创建一个新的 Prisma Postgres 数据库。
- 通过
pg_dump导出您现有的数据。 - 通过
pg_restore将之前导出的数据导入到 Prisma Postgres。
在第三步中,您将使用直连安全连接到您的 Prisma Postgres 数据库以运行 pg_restore。
先决条件
- 您现有 PostgreSQL 数据库的连接 URL
- 一、帐户
- 已安装 Node.js 18+
- 用于创建和恢复备份的 PostgreSQL CLI 工具(
pg_dump、pg_restore)
Prisma Postgres 运行 PostgreSQL 17。您的 pg_dump 和 pg_restore 工具需要是版本 17 才能确保兼容性。您可以通过运行 pg_dump --version 或 pg_restore --version 来检查您的版本。
1. 创建一个新的 Prisma Postgres 数据库
按照以下步骤创建一个新的 Prisma Postgres 数据库
- 登录到并打开控制台。
- 在您选择的工作区中,点击 New project 按钮。
- 在 Name 字段中输入您的项目名称,例如 hello-ppg。
- 在 Prisma Postgres 部分,点击 Get started 按钮。
- 在 Region 下拉菜单中,选择离您当前位置最近的区域,例如 US East (N. Virginia)。
- 点击 Create project 按钮。
数据库配置完成后,获取您的直连字符串
- 导航到您的活跃 Prisma Postgres 实例。
- 点击项目侧边导航栏中的 API Keys 选项卡。
- 点击 Create API key 按钮。
- 在弹出的窗口中,为 API 密钥提供一个 Name,然后点击 Create。
- 复制以
postgres://开头的连接字符串,这就是您的直连字符串。
保存连接字符串,您将在第 3 步中用到它。
2. 从现有数据库导出数据
在此步骤中,您将从现有数据库导出数据并将其存储在本地计算机上的 .bak 文件中。
请确保您已准备好现有数据库的连接 URL,它应该像这样结构化
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
展开下方以获取特定于提供商的说明,帮助您确定正确的连接字符串
Neon
- 请确保通过关闭 Connection pooling 切换来选择非池化连接字符串。
sslmode必须设置为require并附加到您的 Neon 数据库 URL,以便命令能够正常工作。- 连接 URL 应该类似于这样
postgresql://USER:PASSWORD@YOUR-NEON-HOST/DATABASE?sslmode=require
Supabase
- 使用采用 Supavisor 会话模式 的数据库连接 URL。
- 连接 URL 应该类似于这样
postgres://postgres.apbkobhfnmcqqzqeeqss:[YOUR-PASSWORD]@aws-0-ca-central-1.pooler.supabase.com:5432/postgres
接下来,运行以下命令导出您的 PostgreSQL 数据库数据(将 __DATABASE_URL__ 占位符替换为您的实际数据库连接 URL)
pg_dump \
-Fc \
-v \
-d __DATABASE_URL__ \
-n public \
-f db_dump.bak
以下是此命令中使用的 CLI 选项的快速概览
-Fc: 使用自定义备份格式,推荐用于pg_restore-v: 以详细模式运行pg_dump-d: 指定数据库连接字符串-n: 指定目标 PostgreSQL 模式-f: 指定备份文件的输出名称
运行此命令将创建一个名为 db_dump.bak 的备份文件,您将在下一步中使用它将数据恢复到您的 Prisma Postgres 数据库中。
3. 将数据导入到 Prisma Postgres
在本节中,您将使用您的直连字符串连接到您的 Prisma Postgres 实例,并通过 pg_restore 导入数据。
您从第 1 步获得的直连字符串应该像这样
postgres://USER:PASSWORD@db.prisma.io:5432/?sslmode=require
使用 第 2 步 中的备份文件,通过运行此命令(将 __USER__、__PASSWORD__ 替换为您的直连字符串中的值),使用 pg_restore 将数据恢复到您的 Prisma Postgres 数据库中
pg_restore \
-h db.prisma.io \
-p 5432 \
-U __USER__ \
-d postgres \
-v \
./db_dump.bak \
&& echo "-complete-"
当提示时,输入您的直连字符串中的 __PASSWORD__。
您还可以使用完整的连接字符串格式
pg_restore \
-d "postgres://USER:PASSWORD@db.prisma.io:5432/postgres?sslmode=require" \
-v \
./db_dump.bak \
&& echo "-complete-"
命令执行完成后,您将成功地将数据从现有 PostgreSQL 数据库导入到 Prisma Postgres 🎉
要验证导入是否成功,您可以使用 Prisma Studio。您可以在以下位置打开它通过点击项目左侧导航栏中的 Studio 选项卡,或运行此命令在本地启动 Prisma Studio
npx prisma studio
4. 更新您的应用程序代码以查询 Prisma Postgres
场景 A:您已经在使用 Prisma ORM
如果您已经在使用 Prisma ORM,您需要更新您的数据库连接 URL 以指向您的新 Prisma Postgres 实例。
更新您的 .env 文件中的 DATABASE_URL 以匹配您在第 1 步中获得的 Prisma Postgres 直连字符串
DATABASE_URL="postgres://USER:PASSWORD@db.prisma.io:5432/?sslmode=require"
然后,重新生成 Prisma Client,以便更新的环境变量生效
npx prisma generate
完成此操作后,您可以运行您的应用程序,它应该像以前一样工作。
有关从头开始设置 Prisma ORM 与 Prisma Postgres 的完整指南,包括驱动程序适配器配置和最佳实践,请参阅Prisma ORM 与 Prisma Postgres 快速入门。
场景 B:您尚未使用 Prisma ORM
如果您尚未使用 Prisma ORM,您需要完成以下步骤才能从您的应用程序中使用 Prisma Postgres
- 在您的项目中安装 Prisma CLI 和其他所需的依赖项
- 内省数据库以生成 Prisma schema
- 生成 Prisma Client
- 更新应用程序中的查询以使用 Prisma ORM
您可以在本指南中找到此过程的详细分步说明:将 Prisma ORM 添加到现有项目。