Skip to main content
On this page

数据库

Info

您正在查看 Deno DeployEA 的文档。寻找 Deploy Classic 文档?请点击这里

数据库功能允许您将应用程序连接到外部数据库服务器。当您为应用分配数据库时,Deno Deploy 会自动为每个部署环境(生产环境、Git 分支和预览时间线)配置独立的数据库。

您的代码会自动连接到每个环境对应的正确数据库,无需手动检测时间线或处理数据库名称。只需使用您喜爱的数据库驱动程序进行连接——Deno Deploy 会通过环境变量自动处理连接细节。

入门指南 Jump to heading

添加数据库 Jump to heading

导航到您的组织仪表板,然后点击导航栏中的“数据库”。从这里,选择匹配您使用场景的操作流程:

关联外部数据库 Jump to heading

  • 点击“关联数据库”以连接现有数据库实例。
  • 选择 PostgreSQL,然后手动输入连接详情,或粘贴连接字符串自动填充表单。
  • 详情通常包括主机名、端口(通常为 5432)、用户名、密码,以及如果提供商要求的 CA 证书。
  • 使用“测试连接”按钮验证设置,然后命名实例并点击“保存”。

创建托管数据库 Jump to heading

  • 点击“创建数据库”以通过 Deploy 创建托管数据存储。
  • 当前可用:
    • Deno KV — 一款快速的全球分布式键值存储,专为边缘设计。
    • Prisma Postgres — 全球最先进的开源关系型数据库,由 Prisma 托管。

使用连接字符串 Jump to heading

您可以直接粘贴类似 postgresql://username:password@hostname:port/database 的连接字符串,自动填充表单字段,无需手动输入每项信息。

常见格式:

  • PostgreSQL:postgresql://user:pass@localhost:5432/dbnamepostgres://user:pass@localhost:5432/dbname

将应用连接到数据库 Jump to heading

有了数据库实例后,您可以将其分配给您的应用。在数据库实例列表中,点击您数据库实例旁的“分配”,从下拉菜单选择应用。您还可以选择配置自动化迁移命令,该命令会在每次构建后自动执行(详见自动化迁移命令)。

Deno Deploy 会自动为每个时间线创建独立数据库。以 PostgreSQL 为例,命名规则如下:

  • 生产部署使用 {app-id}-production
  • Git 分支使用 {app-id}--{branch-name}
  • 预览部署使用 {app-id}-preview

这确保您的生产数据在开发和测试期间保持安全。您可以监控配置过程,并观察状态变为“已连接”。如果出现错误,可以使用“修复”按钮重试。

在代码中使用数据库 Jump to heading

零配置要求 Jump to heading

为应用分配数据库后,从代码中连接数据库非常简单。您无需配置连接字符串、设置环境变量或管理凭证——Deno Deploy 自动处理所有这些。

只需照常使用您喜欢的数据库库,它会自动连接到对应您当前环境的正确数据库。

自动环境变量 Jump to heading

对于 PostgreSQL 数据库(无论是关联还是托管),Deno Deploy 会自动将标准数据库环境变量注入到您的应用运行时环境中:PGHOSTPGPORTPGDATABASE(根据当前环境自动选择)、PGUSERPGPASSWORDPGSSLMODEDATABASE_URL。这些变量遵循标准规范,大多数数据库库都能自动检测并使用,无需额外配置。

PostgreSQL 示例 Jump to heading

以下是在 Deno Deploy 应用中连接 PostgreSQL 的示例:

import { Pool } from "npm:pg";

// 无需配置——Deno Deploy 会自动处理
const pool = new Pool();

Deno.serve(async () => {
  // 使用数据库
  const result = await pool.query("SELECT * FROM users WHERE id = $1", [123]);

  return new Response(JSON.stringify(result.rows), {
    headers: { "content-type": "application/json" },
  });
});

工作原理 Jump to heading

Deno Deploy 会自动检测您的代码运行环境(生产、Git 分支或预览),并选择对应的数据库。正确的连接详情被自动设置为环境变量,您的数据库库会读取这些标准环境变量。

您的代码在所有环境中以相同方式运行,但连接到不同数据库。相同的 new Pool() 代码会在生产环境连接到 myappid-production,在 Git 分支连接到 myappid--branch-name,在预览环境连接到 myappid-preview

迁移和 schema 管理 Jump to heading

每个环境拥有独立数据库,您可以在 Git 分支中安全测试迁移,而不会影响生产环境或其他分支的数据库。

自动化迁移命令 Jump to heading

当将数据库分配给应用时,您可以配置一个迁移命令,使其在每次成功构建后自动运行。这确保您的数据库架构与应用代码在所有环境中保持同步。

配置迁移命令步骤:

  1. 绑定数据库时(或编辑现有绑定),在“迁移命令”字段输入命令(例如:deno task migratenpm run migrate)。
  2. 该命令会在每次成功构建新版本后自动执行。
  3. 命令会针对每个数据库环境单独执行,包括生产、每个 Git 分支数据库和预览数据库。
  4. 迁移命令执行时,可访问与您的应用相同的环境变量,包括 PGHOSTPGPORTPGDATABASE 等。

使用 node-pg-migrate 的示例配置:

在您的 deno.json 中添加任务:

{
  "tasks": {
    "migrate": "deno run --allow-net --allow-env --allow-read --allow-write npm:node-pg-migrate up"
  }
}

创建迁移目录并添加迁移文件,例如 migrations/1234567890_create-users-table.js

exports.up = (pgm) => {
  pgm.createTable("users", {
    id: "id",
    name: { type: "varchar(100)", notNull: true },
    email: { type: "varchar(100)", notNull: true },
    created_at: {
      type: "timestamp",
      notNull: true,
      default: pgm.func("current_timestamp"),
    },
  });
};

exports.down = (pgm) => {
  pgm.dropTable("users");
};

然后在分配数据库时将迁移命令设置为 deno task migrate。Deno Deploy 会在每次构建后自动运行,确保所有环境的数据库保持最新。

本地开发 Jump to heading

本地开发时,您可以使用本地 PostgreSQL 实例(通过包管理器安装 PostgreSQL 或从 postgresql.org 下载)或连接远程数据库服务器。

在项目根目录创建 .env 文件(如果不存在),并添加 PostgreSQL 连接详情:

PGHOST=localhost        # 或您的远程主机
PGPORT=5432
PGDATABASE=myapp_dev
PGUSER=myuser
PGPASSWORD=mypassword
PGSSLMODE=prefer        # 远程连接使用 `require`

然后使用 --env 标志运行应用,自动加载环境变量:

deno run --env --allow-all main.ts

您的应用代码保持不变——本地开发期间,它会自动使用这些环境变量连接到您选择的数据库。

SSL 配置(关联数据库) Jump to heading

所有连接到关联的外部数据库均使用 SSL 加密保障安全。主要区别在于不同数据库提供商对证书的处理方式。此部分不适用于托管的 Deno KV。

证书类型 Jump to heading

受信任的根 CA 证书: 部分数据库提供商使用由受信任根证书颁发机构(如 Let’s Encrypt 或 DigiCert)签发的证书,这类证书无需配置即可自动工作。

私有根 CA 证书: 部分提供商使用自签名证书或私有 CA,您需要上传用于签名数据库证书的 CA 证书。

证书配置 Jump to heading

受信任根 CA 的数据库: 无需上传证书,SSL 连接自动工作。一些托管数据库服务属于此类。

私有根 CA 的数据库: AWS RDS 用户可点击“使用 AWS 证书包”自动配置证书,无需手动下载。其他提供商则需上传相应的 CA 证书。

常见提供商 Jump to heading

AWS RDS 使用 AWS 自有的证书颁发机构(非公共信任)。点击“使用 AWS 证书包”即可自动配置,无需手动下载证书。

Google Cloud SQL 使用 Google 自有的证书颁发机构(非公共信任)。您需要上传 Google Cloud SQL CA 证书,可从 Google Cloud 控制台下载。

自托管数据库 如果使用自签名证书,需上传自定义 CA 证书;或者您可配置数据库使用受公共信任的 CA 证书。

数据库管理 Jump to heading

查看数据库详情 Jump to heading

点击任意数据库实例查看连接信息(主机名、端口、引擎类型)、已分配的应用、实例中创建的各个数据库,以及健康和连接状态。

数据库状态指示器 Jump to heading

仪表板显示以下状态:

  • 🟢 已连接 - 所有数据库均可用且正常
  • 🟡 创建中 - 正在配置数据库
  • 🔴 错误 - 某些数据库创建失败
  • ⚪ 未分配 - 尚未有应用使用此数据库

管理应用分配 Jump to heading

要将数据库分配给应用,点击数据库实例上的“分配”,从下拉列表选择应用并确认。您可以选择配置迁移命令(详见自动化迁移命令)。

编辑已有分配(包括修改迁移命令)时,进入数据库详情页面,在“已分配应用”表格找到应用,点击旁边的“编辑”。

要移除应用绑定,进入数据库详情页,在“已分配应用”表格找到应用,点击“移除”。

编辑数据库设置 Jump to heading

点击任意数据库实例旁的“编辑”来更新连接详情。保存前请测试连接确保正常。

支持的数据库引擎 Jump to heading

  • Deno KV(托管数据库)— 快速的全球分布式键值存储,专为边缘设计。
  • Prisma Postgres(托管数据库)— 全球最先进的开源关系型数据库,由 Prisma 托管。
  • PostgreSQL(关联数据库)— 连接现有的外部实例。

未来版本计划支持更多引擎,如 MySQL、MongoDB、Redis 等。

故障排除 Jump to heading

连接问题 Jump to heading

“连接失败”错误 通常表示:

  • 主机名和端口错误
  • 用户名或密码错误
  • 数据库服务器未启动
  • 网络连接问题

请确认所有连接详情且数据库服务器可访问。

“权限被拒绝”错误 表示数据库用户权限不足。确认用户具有所需权限,能创建数据库,并且可以从 Deno Deploy 服务器连接。

SSL 连接问题 可能因:

  • 使用受信任根 CA,但数据库未正确配置 SSL
  • 使用私有根 CA,未上传正确的 CA 证书
  • 数据库服务器不支持 SSL
  • 证书已过期

请检查数据库服务器的 SSL 配置及证书有效性。

配置问题 Jump to heading

“数据库创建失败” 通常表示:

  • 用户缺少 CREATE 权限
  • 磁盘空间不足
  • 数据库名称冲突

请检查权限和服务器容量。

“超时”错误 可能是:

  • Deno Deploy 与数据库服务器间网络连接问题
  • 数据库服务响应缓慢

请检查服务器负载和性能。

“错误”状态 可通过:

  • 点击“修复”按钮重试操作
  • 查看数据库服务器日志获取详细信息

常见问题 Jump to heading

问:多个应用可以共享同一个数据库实例吗?

答:可以!多个应用可分配到同一数据库实例,每个应用拥有独立的数据库隔离。

问:移除应用分配会影响数据吗?

答:不会。数据库仍然保留在您的服务器上,仅解除应用与数据库实例的连接。

问:可以使用同一个数据库支持多个环境吗?

答:默认情况下,每个环境(生产、分支、预览)有独立数据库以确保隔离及防止数据冲突。不过您可以通过数据库库的配置自定义连接数据库。

问:如何直接访问我的数据库?

答:您可以使用提供的连接信息直接连接至您的数据库服务器。数据库名称在 Deno Deploy 仪表板中可见。

问:可以更改数据库连接信息吗?

答:可以,点击数据库实例旁“编辑”更新连接信息。保存前请先测试确保连接正常。

问:如何删除数据库实例?

答:先移除所有应用分配,再点击数据库实例的“删除”。这只会从 Deno Deploy 移除连接,不会影响实际数据库服务器。

你找到了你需要的东西吗?

编辑此页面
隐私政策