找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

479

积分

0

好友

69

主题
发表于 21 小时前 | 查看: 2| 回复: 0

在 Rust Web 开发中,SQLx 以其异步支持和独特的“编译时 SQL 检查”能力而备受青睐。它允许开发者直接使用原生 SQL,同时借助 Rust 的类型系统保障查询安全,无需学习复杂的 DSL。

SQLx架构图

但在编写业务代码之前,如何搭建和有效管理数据库环境是关键的第一步。本文将带你从零开始,实操 SQLx CLI 工具的安装、PostgreSQL数据库的创建与管理,并深入讲解数据库迁移(Migration)的核心流程,为你的 Rust 后端开发项目奠定坚实的基础。

SQLx 是一个纯 Rust 编写的异步 SQL 工具包,其核心特性是在编译时检查查询语句的正确性。

安装 SQLx CLI

首先,通过 Cargo 安装 SQLx 命令行工具。为确保兼容性,建议指定 rustlspostgres 特性。

➜ cargo install sqlx-cli --no-default-features --features rustls --features postgres

查看 SQLx CLI 命令

安装完成后,可以使用 sqlx --help 查看所有可用命令及其功能概览。

➜ sqlx
Command-line utility for SQLx, the Rust SQL toolkit.

Usage: sqlx [OPTIONS] <COMMAND>

Commands:
  database  Group of commands for creating and dropping your database
  prepare   Generate query metadata to support offline compile-time verification
  migrate   Group of commands for creating and running migrations
  help      Print this message or the help of the given subcommand(s)

Options:
      --no-dotenv  Do not automatically load `.env` files
  -h, --help       Print help
  -V, --version    Print version

创建数据库

接下来,创建一个名为 chat 的数据库用于演示。这里使用 PostgreSQL 自带的 createdb 命令。

➜ createdb chat

安装 pgcli(可选)

pgcli 是一个功能强大的 PostgreSQL 命令行客户端,提供语法高亮和自动补全,能显著提升操作体验。可以通过 Homebrew 安装:

brew install pgcli

使用 pgcli 连接数据库

安装后,使用 pgcli 连接到我们刚创建的 chat 数据库。

➜ pgcli chat
Using local time zone Asia/Shanghai (server uses Asia/Shanghai)
Use `set time zone <TZ>` to override, or set `use_local_timezone = False` in the config
Server: PostgreSQL 17.6 (Homebrew)
Version: 4.3.0
Home: http://pgcli.com
qiaopengjun@/tmp:chat> [F2] Smart Completion: ON  [F3] Multiline: OFF  [F4] Emacs-mode  [F5] Explain: OFF

查看数据库中的表

pgclipsql 中,可以使用 \dt 元命令列出当前数据库中的所有表。这个命令等效于执行 SELECT * FROM pg_catalog.pg_tables;

实操示例:

qiaopengjun@/tmp:chat> \dt
+--------+------+------+-------+
| Schema | Name | Type | Owner |
|--------+------+------+-------|
+--------+------+------+-------+
SELECT 0
Time: 0.037s

Psql 常用命令速查

下表列出了在 PostgreSQL 命令行工具中常用的元命令:

命令 作用
\dt 列出所有普通表
\dv 列出视图
\di 列出索引
\ds 列出序列
\d <table> 查看指定表结构
\l 列出所有数据库
\c dbname 切换数据库
\dn 列出 schema

了解 sqlx migrate 命令

sqlx migrate 是 SQLx 提供的核心数据库迁移工具,用于管理数据库结构的版本化变更。

➜ sqlx migrate
Group of commands for creating and running migrations

Usage: sqlx migrate <COMMAND>

Commands:
  add           Create a new migration with the given description
  run           Run all pending migrations
  revert        Revert the latest migration with a down file
  info          List all available migrations
  build-script  Generate a `build.rs` to trigger recompilation when a new migration is added
  help          Print this message or the help of the given subcommand(s)

Options:
  -h, --help  Print help

创建迁移文件

使用 migrate add 命令创建一个新的迁移文件,描述为 “initial”。

➜ sqlx migrate add initial
Creating migrations/20251203080702_initial.sql

命令执行后,会在项目根目录下生成 migrations 文件夹和对应的 SQL 文件。

├── migrations
│   └── 20251203080702_initial.sql

你需要在此文件中编写 CREATE TABLE 等 SQL 语句,定义此次迁移要执行的操作。

执行数据库迁移

编写完 SQL 脚本后,使用 migrate run 命令执行所有待处理的迁移,将表结构变更应用到数据库。

➜ sqlx migrate run
Applied 20251203080702/migrate initial (23.433375ms)

验证迁移结果

再次连接数据库,使用 \dt 命令查看,可以发现新增了业务表以及 SQLx 用于记录迁移历史的 _sqlx_migrations 表。

qiaopengjun@/tmp:chat> \dt
+--------+------------------+-------+----------+
| Schema | Name             | Type  | Owner    |
|--------+------------------+-------+----------|
| public | _sqlx_migrations | table | postgres |
| public | chats            | table | postgres |
| public | messages         | table | postgres |
| public | users            | table | postgres |
+--------+------------------+-------+----------+

查询 _sqlx_migrations 表可以查看已执行的迁移记录。

qiaopengjun@/tmp:chat> select * FROM _sqlx_migrations;

总结

通过以上步骤,我们完成了 Rust 项目中围绕 数据库/中间件 的基础设施搭建。整个过程涵盖了从安装 sqlx-cli、配置数据库,到使用迁移工具进行版本化管理的完整工作流。这套基于 Migration 的实践是现代 后端开发 中管理数据库模式变更的标准方法,为团队协作和持续集成部署提供了可靠保障。掌握这些工具后,你就可以专注于在 Rust 中实现业务逻辑了。

参考




上一篇:Apollo配置中心实战指南:微服务架构下的动态配置与Nacos替代方案
下一篇:RPS(接收包调度)机制详解:Linux多核系统网络性能提升实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-8 23:42 , Processed in 0.979664 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表