Przejdź do głównej zawartości

Operacje bazodanowe z Codex

Twój product manager chce dashboardu raportowego, który odpytuje pięć tabel z agregacjami, zakresami dat i filtrami na poziomie użytkownika. Istniejące zapytania są już wolne na głównych tabelach, a dodanie złożonych joinów pogorszy sytuację. Potrzebujesz nowego schematu, zoptymalizowanych zapytań, odpowiednich indeksów i migracji, która bezpiecznie działa na produkcyjnej bazie danych z 50 milionami wierszy. Pomyłka oznacza przestój. Codex może zaprojektować schemat, wygenerować migrację, napisać zapytania i przetestować je wobec prawdziwej bazy danych w środowisku chmurowym — wszystko zanim dotkniesz produkcji.

  • Prompty do projektowania schematów, generowania migracji i optymalizacji zapytań z prawdziwymi ORM-ami
  • Przepływ pracy w środowisku chmurowym do testowania migracji wobec danych o rozmiarze produkcyjnym
  • Przepis na automatyzację cotygodniowych audytów wydajności zapytań
  • Techniki używania serwerów MCP do zapewnienia Codex bezpośredniego dostępu do bazy danych podczas rozwoju

Zacznij w CLI lub rozszerzeniu IDE, gdzie możesz szybko iterować. Podaj Codex wymagania i swój istniejący schemat jako kontekst.

Przejrzyj projekt, zadaj pytania uzupełniające i iteruj. Zmiany schematu są kosztowne do cofnięcia — zainwestuj tu czas.

Gdy schemat jest sfinalizowany, wygeneruj migrację w worktree, aby utrzymać ją w izolacji:

Generate a Drizzle migration for the reporting dashboard tables we just designed.
Requirements:
- The migration must be safe to run on a production database with 50M+ rows
- Add tables and indexes in the correct order (tables before indexes, referenced tables before referencing tables)
- Use IF NOT EXISTS for safety
- Include a DOWN migration that cleanly drops everything
- Follow the migration naming convention in drizzle/migrations/
After generating the migration, run it against the dev database to verify it applies cleanly.
Do NOT populate data. We will handle backfill separately.

Zapytania bazodanowe to obszar, w którym zdolność Codex do odczytania całego schematu się opłaca. Może pisać zapytania uwzględniające indeksy, strategie joinów i faktyczne API ORM-a.

Kompleksowe dane testowe umożliwiają weryfikację zapytań i wykrywanie problemów wydajnościowych przed produkcją. Wygeneruj skrypt zasilania:

Create a database seeding script at scripts/seed-reports.ts that:
1. Creates 100 test users
2. Generates 6 months of order data (varying volume per user, per day)
3. Includes realistic patterns: weekday vs weekend variation, seasonal trends, some users with refunds
4. Populates the daily summary table from the generated orders
5. Is idempotent (safe to run multiple times)
Use Drizzle for inserts. Use batched inserts (chunks of 1000) for performance.
The script should be runnable via: npx tsx scripts/seed-reports.ts

Przed uruchomieniem migracji na staging lub produkcji przetestuj je w środowisku chmurowym, które odzwierciedla twoje ustawienie produkcyjne. Środowiska chmurowe obsługują skrypty konfiguracyjne, gdzie możesz zainstalować bazę danych, uruchomić migracje i zasilić dane.

Skonfiguruj środowisko chmurowe ze skryptem konfiguracyjnym:

Okno terminala
# Install dependencies
npm install
# Start PostgreSQL
pg_ctl start
# Run all existing migrations
npm run db:migrate
# Seed with production-scale test data
npx tsx scripts/seed-reports.ts

Następnie prześlij zadanie w chmurze:

Okno terminala
codex cloud exec --env db-test "Run the new reporting dashboard migration. After it completes, execute each of the 5 dashboard queries from src/lib/db/queries/reports.ts against the seeded data. Report:
1. Whether each query returns correct results
2. Execution time for each query
3. EXPLAIN ANALYZE output for the two slowest queries
4. Any missing indexes or full table scans
If any query takes longer than 500ms, suggest optimizations."

Skonfiguruj cotygodniową automatyzację monitorującą wydajność zapytań:

Używanie MCP do bezpośredniego dostępu do bazy danych

Dział zatytułowany „Używanie MCP do bezpośredniego dostępu do bazy danych”

Jeśli chcesz, aby Codex odpytywał twoją bazę danych bezpośrednio podczas rozwoju (nie tylko generował kod), skonfiguruj serwer MCP PostgreSQL:

~/.codex/config.toml
[mcp_servers.postgres]
type = "stdio"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost:5432/mydb"]

Z podłączonym serwerem MCP Codex może wykonywać zapytania podczas sesji, inspekcjonować rzeczywiste dane i weryfikować wyniki bez konieczności ręcznego uruchamiania zapytań przez ciebie.

Migracja działa na dev, ale nie na danych produkcyjnych. Dodanie indeksu na tabeli z 50 milionami wierszy może trwać minuty i blokować tabelę. Powiedz Codex: “Generate the index creation with CONCURRENTLY for PostgreSQL so it does not lock the table. Include a note about expected duration based on table size.”

Zapytania generowane przez ORM są nieefektywne. Drizzle (i inne ORM-y) czasami generują nieoptymalny SQL. Uwzględnij “check the generated SQL for each query using .toSQL() and verify it uses the expected indexes” w swoim prompcie. Dla krytycznych zapytań rozważ surowy SQL opakowany w wywołanie execute Drizzle.

Środowisko chmurowe nie ma wystarczających danych, aby ujawnić problemy wydajnościowe. Skrypt zasilania generuje 100 użytkowników z 6 miesiącami danych, ale produkcja ma 100 tysięcy użytkowników z 3 latami danych. Przeskaluj skrypt zasilania proporcjonalnie lub jawnie testuj z EXPLAIN ANALYZE wobec statystyk tabel produkcyjnych.

Obsługa stref czasowych w agregacjach dat. Zapytania z zakresami dat, które nie uwzględniają stref czasowych, produkują nieprawidłowe wyniki dla użytkowników w różnych strefach. Uwzględnij “all date-range queries must accept and handle timezone-aware timestamps. Store in UTC, convert for display” w swoich ograniczeniach.