Neon

Neon 是一个开源的 PostgreSQL 数据库,支持云原生、边缘计算、Serverless 等场景。

ShipAny 已集成 Neon,按照下面的步骤快速接入。

快速开始

创建 Neon 数据库

注册 Neon 账号,登录 管理后台,点击 New Project 按钮,创建一个项目。

复制数据库连接地址

进入上一步创建的数据库,点击 Connect 按钮,复制数据库连接地址。

在终端执行复制的命令,测试数据库连接是否正常。

psql 'postgresql://neondb_owner:xxxxxx@xxx.neon.tech/neondb?sslmode=require&channel_binding=require'

Neon 数据库的 Database URL 为:

postgresql://neondb_owner:xxxxxx@xxx.neon.tech/neondb?sslmode=require&channel_binding=require
配置数据库

复制上一步设置的数据库 Database URL

在项目的环境变量文件中,填入 Neon 数据库相关的配置。

  • 本地开发环境变量文件 .env.development
  • 生产环境变量文件 .env.production
  • Cloudflare Workers 环境变量文件 wrangler.toml
DATABASE_PROVIDER = "postgresql"
DATABASE_URL = "neon-database-url"
DB_SCHEMA_FILE = "./src/config/db/schema.postgres.ts"
DB_MIGRATIONS_OUT = "./src/config/db/migrations"
  • DATABASE_PROVIDER,必填,固定值 postgresql
  • DATABASE_URL,必填,填 Neon 数据库的 Database URL
  • DB_SCHEMA_FILE,必填,固定值 ./src/config/db/schema.postgres.ts
  • DB_MIGRATIONS_OUT,选填,数据库迁移文件输出路径,默认值 ./src/config/db/migrations,可以根据数据库类型选择不同的输出路径
修改数据库 Schema 文件

使用 Neon 数据库时,数据表结构定义在 ./src/config/db/schema.postgres.ts 文件中,你需要导出这个文件的数据表。

打开 ./src/config/db/schema.ts 文件,修改内容为:

export * from './schema.postgres';
迁移数据表

执行以下命令,迁移数据表

pnpm db:generate
pnpm db:migrate
管理数据库

你可以在 Neon 管理后台 管理数据库,也可以在本地执行命令:

pnpm db:studio

打开数据库管理面板。

自定义

修改数据表

如果你需要新增数据表,或者修改数据表字段,可以打开 ./src/config/db/schema.postgres.ts 文件,修改数据表结构。

修改完成后,执行以下命令,迁移数据表

pnpm db:generate
pnpm db:migrate

修改数据库连接

如果你需要修改数据表连接参数,比如配置自定义选项、连接池等,可以修改 ./src/core/db/postgres.ts 文件中的逻辑。

在进行数据操作时,默认使用的是 ./src/core/db/index.ts 导出的 db() 对象,导出类型是 any,在某些情况下,可能会缺乏类型提示。

import { db } from '@/core/db';
import { user } from '@/config/db/schema';

const [result] = await db().select().from(user).limit(1);

如果你希望使用强类型的数据库对象,可以在操作数据时,使用以下方式获取数据库对象:

import { dbPostgres } from '@/core/db';
import { user } from '@/config/db/schema';

const [result] = await dbPostgres().select().from(user).limit(1);

或者:

import { getPostgresDb } from '@/core/db/postgres';
import { user } from '@/config/db/schema';

const [result] = await getPostgresDb().select().from(user).limit(1);

部署到 Cloudflare Workers

Neon 数据库支持部署到 Cloudflare Workers,也支持使用 Hyperdrive 加速数据库访问。

使用 Hyperdrive 加速数据库访问的配置参考:配置 Hyperdrive

在 Cloudflare Workers 部署项目使用 Neon 数据库的 wrangler.toml 部分内容参考:

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "your-hyperdrive-config-id"
localConnectionString = "postgresql://neondb_owner:xxxxxx@xxx.neon.tech/neondb?sslmode=require&channel_binding=require"

[vars]
DATABASE_PROVIDER = "postgresql"
DATABASE_URL = "postgresql://neondb_owner:xxxxxx@xxx.neon.tech/neondb?sslmode=require&channel_binding=require"

参考