yeke.io · dokümanlar

SQLite'tan PostgreSQL'e Taşıma

SQLite verilerinizi yeke-migrate ile PostgreSQL’e taşıyın. Araç core kapalıyken çalışır, yalnızca bu yönde taşıma yapar ve tamamlanmadan önce veri bütünlüğünü doğrular.

Genel bakış

Var olan denetim izini çöpe atmadan PostgreSQL'e geçmek için.

yeke-migrate, kaynak SQLite dosyasındaki kayıtları PostgreSQL’e kopyalar. Denetim izi ve şifreli sütunlar da taşınır; kaynak dosya silinmez.

Araç çevrimdışı ve tek yönlüdür: core durdurulmuşken çalışır, yalnız SQLite → PostgreSQL yönünde taşır. Ters yön (PostgreSQL → SQLite) yoktur.

Ön koşullar

Üçü de araç tarafından zorlanmaz; işletme kuralıdır.

  • Önce yedek alın. Taşıma başlamadan önce kaynak SQLite dosyasının (ve yanındaki snapshot.key dosyasının) bir kopyasını çıkarın — geri dönüş yolu budur.
  • Core durmuş olmalı. Kaynak dosya kimse tarafından yazılıyor olmamalı; araç bunu kendisi denetlemez, çalıştırmadan önce core sürecini durdurmak operatörün sorumluluğudur.
  • Hedef boş olmalı. Hedef PostgreSQL'de schema_migrations tablosu zaten varsa araç reddeder — yarıda kalmış bir denemeden kurtarma yolu hedef şemayı düşürüp kaynağın (taşıma öncesi alınmış) yedeğinden yeniden başlamaktır.

Aracı edinme

Araç ayrıca dağıtılmaz; core imajının içinden çıkarılır.

yeke-migrate core imajının içinde, tek dosyalık bir bundle olarak taşınır (/app/tools/yeke-migrate.mjs). Normal bir kurulumda aracı yayınlanmış imajdan çıkarıp herhangi bir Node.js ≥ 22 makinesinde çalıştırabilirsiniz:

docker create --name yeke-migrate-extract nairotech/yeke:<surum>
docker cp yeke-migrate-extract:/app/tools/yeke-migrate.mjs ./yeke-migrate.mjs
docker rm yeke-migrate-extract

Ağdan kopuk (air-gap) paketinde aynı araç hazır bir bundle olarak gelir (cli/yeke-migrate-<sürüm>.mjs) — bkz. air-gap kurulum sayfası, adım 5.

Kullanım

İki zorunlu parametre.

Kurulum sayfasının varsayılan yolunda kaynak dosya bir Docker volume'unda durur, yani host'ta bir yolu yoktur; core durmuşken önce dışarı alın (snapshot.key yanında gelir). Kendi dizininizi bağladıysanız bu adım yok: --source doğrudan o dizindeki core.db.

docker stop yeke
docker cp yeke:/var/lib/yeke ./yeke-data
node yeke-migrate.mjs \
    --source ./yeke-data/core.db \
    --target postgres://kullanici:parola@host:5432/yeke

Zarf şifreli sütunları açan anahtar, core'un kendi anahtar çözümlemesiyle aynı sırayla aranır: --snapshot-key > --snapshot-key-file > YEKE_SNAPSHOT_KEY > YEKE_SNAPSHOT_KEY_FILE > kaynağın yanındaki snapshot.key dosyası. Kaynağı şifreleyen anahtarla aynı anahtar verilmezse zarf örneklem açma adımı başarısız olur ve araç hedefi tamamlanmamış bırakır.

Hedef şema araçta yeniden icat edilmez — core'un kendi güncel şemasından (baseline) doğar ve tablo kopyalama sırası aynı bağımlılık grafiğini izler. counters ve operation_events.seq değerleri düz kopyayla taşınır, yeniden hesaplanmaz.

Bütünlük doğrulaması

Aracın sonradan eklenen bir adımı değil, kendisidir.

  • Satır sayısı eşitliği. Tablo başına kaynak ve hedef satır sayısı karşılaştırılır.
  • Denetim izi bütünlüğü. operation_eventste MAX(seq) + rastgele örneklemin bayt karşılaştırması.
  • Zarf örneklem açma. Şifreli sütunlardan bir örneklem, taşınan anahtarla gerçekten açılabiliyor mu diye denenir.
  • SIEM aktarım imleçleri. Varsa denetim izi aktarım hedeflerinin chain_head/imleç satırları birebir taşınmış mı diye kontrol edilir.

Doğrulamanın tamamı geçmeden araç hedefte schema_migrationsa "tamamlandı" satırını yazmaz.

Yarım taşımada davranış

Kesilmiş bir taşıma sessizce "oldu" sanılmaz.

Taşıma kesilirse veya doğrulama başarısız olursa hedefteki schema_migrations tablosunda tamamlanma kaydı oluşmaz. Core bu hedefle PostgreSQL modunda başlamayı reddeder.

KodAnlamı
0Tamamlandı, hedef işaretlendi.
1Bütünlük doğrulaması başarısız — hedef işaretlenmedi.
2Kullanım hatası (eksik/yanlış parametre).
3Hedef boş değil — aracın kendi güvenlik kapısı.

Sınırlar

Araç dar tutuldu, geniş bir geçiş aracı değil.

  • Geri dönüş yok. PostgreSQL → SQLite yönü desteklenmez. Bir HA kurulumundan tek-node'a inmek isteyen, veriyi PostgreSQL'in kendi araçlarıyla (pg_dump) alır.
  • Önce yedek alın. Taşıma kaynağı bozmaz ama kesme/hata durumunda kaynağın yedeksiz olması geri dönüşü imkânsız kılar.
  • Canlı/çift-yazımlı geçiş yok. Core çalışırken taşıma yapılamaz; kesinti beklenmelidir (bugünkü her deploy'un getirdiği kesintiyle aynı sınıf).
  • Devam/resume semantiği yok. Yarıda kalmış bir denemeden kurtarma, hedefi düşürüp yeniden başlamaktır.

Hedef PostgreSQL nasıl kurulur?

Taşımadan önce hedefin bağlantı şekli ve lisans kapısı bilinmeli: ikisi de PostgreSQL bağlantısı sayfasında.