OmniStream Docs
  • Panduan Pengguna
  • Developer
  • API Reference
Developer Hub
Pendahuluan
Autentikasi
Model Data
Webhook
WebSocket
Self-Hosting
    Prasyarat Self-HostingDocker ComposeEnvironment VariablesDatabase MigrationsMeta App SetupSMTP ConfigReverse Proxy + CORS ProduksiCORS di Produksi
Error & Rate Limit
Self-Hosting

Database Migrations

Database Migrations

OmniStream memakai sqlx::migrate! untuk menerapkan migrasi PostgreSQL secara otomatis saat service pertama kali start. Tidak ada perintah migrasi manual; cukup letakkan file SQL baru di folder migrations/, build ulang image, dan restart service — migrasi akan berjalan urut sesuai urutan nama file.

Cara kerja

Migrator di-embed ke binary saat build (sqlx::migrate! adalah macro yang membaca folder saat compile-time). Saat api-gateway — dan service lain yang memakai omni_common::db::postgres::create_pg_pool — start, ia:

  1. Membuat tabel _sqlx_migrations jika belum ada.
  2. Membaca semua file .sql di migrations/ (yang sudah di-embed).
  3. Menjalankan hanya file yang belum ter-record di _sqlx_migrations.
  4. Mencatat versi + checksum di _sqlx_migrations untuk mencegah eksekusi ulang.

Konvensi penamaan file

YYYYMMDDHHMMSS_nama_deskriptif.sql — timestamp di depan menentukan urutan eksekusi.

Contoh dari repo:

Code
20260218000001_initial_schema.sql 20260219000002_quick_replies_and_notes.sql 20260220000003_add_email_and_expired_status.sql ... 20260403000040_add_messenger_channel.sql

Daftar migrasi v1

Sebanyak 41 file migrasi di folder migrations/. Daftar pengelompokan kasar:

BlokFileIsi
Skema awal20260218000001_initial_schema.sqlagents, contacts, conversations, messages legacy
Quick replies + catatan20260219000002_quick_replies_and_notes.sqltabel quick_replies + conversation_notes
Email channel20260220000003, 20260220000004status expired + tabel email
Campaign20260221000005, 20260226000010, 20260227000011campaigns + recipients + scheduler
Integrations20260222000006tabel integrations dengan config JSONB
WA Templates20260223000007header media URL
Activity logs20260224000008activity_logs + indeks
Divisions + manajemen20260225000009divisions, agent_divisions, can_broadcast
Routing + tag20260228000012, 20260301000013conversation_tags, routing
Reply v220260302000014canned responses v2
Preview + metrik20260303000015, 20260304000016, 20260305000017last_message_preview, metrik waktu, last_seen
Transfer20260306000018conversation_transfers
Scheduled20260306000019scheduled_messages
CSAT20260306000020csat_surveys
SLA20260306000021sla_policies, sla_breach_logs
Outgoing webhooks20260306000022outgoing_webhooks, webhook_deliveries
Automation20260307000023 ... 20260307000029, 20260307000031rules + alert + snooze + schedule + rollout
Integration accounts20260307000030akun integrasi multi
WA Flows20260307000032, 20260307000033, 20260307000034flows + campaign flow support + encryption
Chat expiration20260308000032chat_expiration_rules
Campaign integration20260308000033, 20260309000035, 20260309000036integration account ref + conversation ref + window expires_at
Crypto20260309000037enable pgcrypto (UUID + gen_random_uuid)
Status simplify20260326000039_simplify_conversation_statuses.sqldisederhanakan ke open/resolved
Messenger channel20260403000040_add_messenger_channel.sqldukungan channel Messenger

Jumlah persisnya bisa anda verifikasi dengan ls migrations/ | wc -l.

MongoDB tidak punya "migrasi" dalam arti sqlx. Indeks-indeks yang dibutuhkan (messages.conversation_id+created_at, messages.external_id sparse, text search, TTL 90 hari untuk webhook_audit) dibuat idempoten di setiap startup oleh omni_common::db::mongodb::setup_indexes.

Menambahkan migrasi baru

  1. Buat file migrations/YYYYMMDDHHMMSS_deskripsi.sql dengan timestamp lebih besar dari semua file yang sudah ada.
  2. Tulis SQL DDL/DML yang idempotent bila memungkinkan (IF NOT EXISTS).
  3. Rebuild image yang memakai sqlx::migrate! — biasanya api-gateway — supaya macro meng-embed file baru: docker compose build api-gateway.
  4. Restart container: docker compose up -d api-gateway.
  5. Log akan menampilkan applied migration <version> untuk tiap file.

sqlx::migrate! memeriksa checksum file yang sudah diterapkan. Jangan pernah mengubah isi file migrasi yang sudah dijalankan di DB manapun — itu akan membuat startup gagal dengan "migration X was previously applied but has been modified". Selalu buat file baru sebagai follow-up.

Debug migrasi gagal

Kalau service crash saat start dengan error migrasi:

  • Baca log api-gateway — error menyebutkan versi migrasi problematis.

  • Cek tabel _sqlx_migrations di DB untuk melihat versi terakhir yang sukses diterapkan:

    Code
    SELECT version, description, success, execution_time FROM _sqlx_migrations ORDER BY version;
  • Untuk dev lokal, reset cepat: docker compose down -v lalu up -d (menghancurkan data — jangan di produksi).

Last modified on June 8, 2026
Environment VariablesMeta App Setup
On this page
  • Cara kerja
  • Konvensi penamaan file
  • Daftar migrasi v1
  • Menambahkan migrasi baru
  • Debug migrasi gagal