Swift 和 PostgreSQL:2025 年后端开发的完美组合

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 和 PostgreSQL:为何这个组合令人惊叹

\n\n

当我们谈论“服务器端 Swift”时,大多数开发者会想到 Vapor、Perfect 或 Kitura。而谈到数据库时,通常会想到熟悉的 MySQL 或 SQLite。但说实话:如果你用 Swift 构建一个严肃的后端,你需要 PostgreSQL。为什么?因为它不仅仅是一个数据库——它是一个处理数据的瑞士军刀,完美契合 Swift 的强大功能。

\n\n

在本文中,我们将探讨如何让 Swift 和 PostgreSQL 协同工作,使你的代码飞驰,数据库稳定运行,让同事们羡慕不已。全是干货——只有实践、代码和真实案例。

\n\n

为什么选择 PostgreSQL 而不是 MySQL?

\n\n

让我们直接澄清一点。PostgreSQL 是一个对象关系型数据库管理系统,它能做到 MySQL 甚至无法想象的事情:

\n\n
    \n
  • 原生 JSON 和 JSONB — 直接在表中存储复杂结构
  • \n
  • 数组 — 无需变通方法或额外表
  • \n
  • 并行查询 — 利用服务器的所有核心
  • \n
  • 可扩展性 — PostGIS、TimescaleDB、用于 AI 的 pgvector
  • \n
\n\n

最重要的是,PostgreSQL 与 SwiftNIO(Vapor 所基于的异步引擎)完美配合。这意味着你的数据库查询不会阻塞执行线程。

\n\n

安装和配置 Swift 的 PostgreSQL 驱动

\n\n

我们从最重要的事情开始——如何将 PostgreSQL 连接到你的 Swift 项目。我们将使用 vapor/fluent-postgres-driver——最流行且最稳定的驱动。

\n\n

步骤 1:添加依赖项

\n\n

打开 Package.swift 并添加:

\n\n
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "MySwiftBackend",\n    platforms: [\n        .macOS(.v13)\n    ],\n    dependencies: [\n        .package(url: "https://github.com/vapor/vapor.git", from: "4.90.0"),\n        .package(url: "https://github.com/vapor/fluent.git", from: "4.10.0"),\n        .package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.8.0")\n    ],\n    targets: [\n        .target(\n            name: "App",\n            dependencies: [\n                .product(name: "Vapor", package: "vapor"),\n                .product(name: "Fluent", package: "fluent"),\n                .product(name: "FluentPostgresDriver", package: "fluent-postgres-driver")\n            ]\n        )\n    ]\n)
\n\n

步骤 2:配置数据库连接

\n\n

在 configure.swift 文件中添加配置:

\n\n
import Vapor\nimport Fluent\nimport FluentPostgresDriver\n\npublic func configure(_ app: Application) throws {\n    // 使用环境变量以确保安全\n    let hostname = Environment.get("DB_HOST") ?? "localhost"\n    let port = Environment.get("DB_PORT").flatMap(Int.init) ?? 5432\n    let username = Environment.get("DB_USERNAME") ?? "swift_user"\n    let password = Environment.get("DB_PASSWORD") ?? "swift_pass"\n    let database = Environment.get("DB_NAME") ?? "swift_backend"\n\n    app.databases.use(\n        .postgres(\n            hostname: hostname,\n            port: port,\n            username: username,\n            password: password,\n            database: database\n        ),\n        as: .psql\n    )\n    \n    // 注册模型\n    app.migrations.add(CreateUser())\n    \n    // 启动时自动迁移\n    try app.autoMigrate().wait()\n}
\n\n

重要提示:切勿在代码中硬编码密码。使用环境变量或通过 Vapor's Environment 使用 .env 文件。

\n\n

在 Swift 中创建数据模型

\n\n

现在是最有趣的部分——定义用户模型。在 Swift 中使用 Fluent 可以优雅且简洁地完成:

\n\n
import Fluent\nimport Vapor\n\nfinal                

博客

书籍推荐