在现代系统开发中,数据库是不可或缺的一部分。如果你正在使用 Rust 编写后端服务或数据处理程序,那么掌握如何与 PostgreSQL 数据库交互就显得尤为重要。本文将带你从零开始,使用官方推荐的 tokio-postgres 库(也常被称为 Rust PostgreSQL库)连接并操作 PostgreSQL 数据库。

在 Rust 生态中,tokio-postgres 是目前最流行、功能最完善的 Rust连接PostgreSQL 的异步驱动库。它基于 Tokio 异步运行时,支持高性能并发操作,非常适合构建高吞吐量的 Web 服务或微服务。
此外,它还提供了类型安全的查询构建、连接池支持(配合 deadpool-postgres 或 bb8)、以及对 PostgreSQL 特有功能(如 JSONB、数组、通知等)的良好支持。
首先,确保你已安装 Rust(可通过 rustup 安装)。然后在终端中执行:
cargo new rust_postgres_democd rust_postgres_demo接着,编辑 Cargo.toml 文件,添加以下依赖:
[dependencies]tokio = { version = "1", features = ["full"] }tokio-postgres = "0.7"这里我们启用了 tokio 的 full 特性以支持完整的异步功能。
假设你本地已安装并运行了 PostgreSQL(可通过 Docker 快速启动),默认用户名为 postgres,密码为 mysecretpassword,数据库名为 testdb。
在 src/main.rs 中编写如下代码:
use tokio_postgres::{NoTls, Error};#[tokio::main]async fn main() -> Result<(), Error> { // 连接字符串格式:host=localhost user=postgres dbname=testdb password=mysecretpassword let (client, connection) = tokio_postgres::connect( "host=localhost user=postgres dbname=testdb password=mysecretpassword", NoTls, ) .await?; // 将连接任务 spawn 到后台,防止阻塞 tokio::spawn(async move { if let Err(e) = connection.await { eprintln!("connection error: {}", e); } }); println!("✅ 成功连接到 PostgreSQL 数据库!"); Ok(())}这段代码使用 tokio_postgres::connect 建立连接,并将连接的生命周期任务放入后台运行。注意:我们使用了 NoTls 表示不启用 TLS 加密(仅适用于本地开发)。
现在我们来创建一张表并插入一些数据。继续修改 main.rs:
use tokio_postgres::{NoTls, Error};#[tokio::main]async fn main() -> Result<(), Error> { let (client, connection) = tokio_postgres::connect( "host=localhost user=postgres dbname=testdb password=mysecretpassword", NoTls, ) .await?; tokio::spawn(async move { if let Err(e) = connection.await { eprintln!("connection error: {}", e); } }); // 创建 users 表 client .execute( "CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, email VARCHAR UNIQUE NOT NULL )", &[], ) .await?; // 插入一条记录 client .execute( "INSERT INTO users (name, email) VALUES ($1, $2)", &[&"张三", &"zhangsan@example.com"], ) .await?; // 查询所有用户 let rows = client .query("SELECT id, name, email FROM users", &[]) .await?; for row in rows { let id: i32 = row.get(0); let name: &str = row.get(1); let email: &str = row.get(2); println!("用户 ID: {}, 姓名: {}, 邮箱: {}", id, name, email); } Ok(())}这里展示了三种常见操作:
execute 执行 DDL(建表)或 DML(插入、更新、删除)语句$1, $2)防止 SQL 注入query 获取结果集,并通过 row.get(index) 提取字段在生产环境中,建议:
openssl 或 rustls 替代 NoTls)deadpool-postgres)提升性能Result 进行细致的错误处理例如,使用 dotenv 读取环境变量:
// .env 文件DATABASE_URL=host=localhost user=postgres dbname=testdb password=mysecretpassword// main.rs 中use std::env;let db_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");let (client, connection) = tokio_postgres::connect(&db_url, NoTls).await?;通过本教程,你已经掌握了如何使用 Rust PostgreSQL库(即 tokio-postgres)进行基本的数据库连接、建表、插入和查询操作。这是构建健壮 Rust 后端服务的重要一步。
记住,Rust数据库操作 的核心优势在于内存安全与零成本抽象,而 tokio-postgres 正好将这些优势带入了数据库领域。随着你对 tokio-postgres教程 的深入学习,你将能构建出高性能、高可靠性的数据驱动应用。
下一步建议:尝试集成连接池、事务处理、以及使用 sqlx 等编译时 SQL 检查工具进一步提升开发体验。
本文由主机测评网于2025-12-14发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025127795.html