Swift e PostgreSQL: por que essa combinação é revolucionária
\n\nQuando falamos "Swift no servidor", a maioria dos desenvolvedores pensa em Vapor, Perfect ou Kitura. E quando o assunto são bancos de dados, vêm à mente o familiar MySQL ou SQLite. Mas sejamos honestos: se você está construindo um backend sério em Swift, precisa de PostgreSQL. Por quê? Porque não é apenas um banco de dados — é um canivete suíço para trabalhar com dados que se encaixa perfeitamente no poder do Swift.
\n\nNeste artigo, vamos explorar como integrar Swift e PostgreSQL para que seu código voe, o banco não caia e seus colegas fiquem com inveja. Sem enrolação — apenas prática, código e casos reais.
\n\nPor que PostgreSQL e não MySQL?
\n\nVamos esclarecer isso de uma vez. PostgreSQL é um SGBD objeto-relacional que faz coisas que o MySQL nem sonha:
\n\n- \n
- JSON e JSONB nativos — armazene estruturas complexas diretamente nas tabelas \n
- Arrays — sem gambiarras ou tabelas extras \n
- Consultas paralelas — utilize todos os núcleos do servidor \n
- Extensibilidade — PostGIS, TimescaleDB, pgvector para IA \n
E o principal: PostgreSQL se integra perfeitamente com SwiftNIO (o motor assíncrono que alimenta o Vapor). Isso significa que suas consultas ao banco não bloquearão o fluxo de execução.
\n\nInstalação e configuração do driver PostgreSQL para Swift
\n\nVamos começar pelo essencial — como conectar o PostgreSQL ao seu projeto Swift. Usaremos vapor/fluent-postgres-driver, o driver mais popular e estável.
Passo 1: Adicionando dependências
\n\nAbra o Package.swift e adicione:
// 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\nPasso 2: Configurando a conexão com o banco
\n\nNo arquivo configure.swift, adicione a configuração:
import Vapor\nimport Fluent\nimport FluentPostgresDriver\n\npublic func configure(_ app: Application) throws {\n // Use variáveis de ambiente para segurança\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 // Registrando modelos\n app.migrations.add(CreateUser())\n \n // Automigrações na inicialização\n try app.autoMigrate().wait()\n}\n\nDica importante: nunca coloque senhas fixas no código. Use variáveis de ambiente ou arquivos .env com o Vapor's Environment.
Criando um modelo de dados em Swift
\n\nAgora a parte mais interessante — vamos definir um modelo de usuário. No Swift com Fluent, isso é feito de forma elegante e concisa:
\n\nimport Fluent\nimport Vapor\n\nfinal