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.keydosyası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_migrationstablosu 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/yekeZarf ş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_eventsteMAX(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.
| Kod | Anlamı |
|---|---|
0 | Tamamlandı, hedef işaretlendi. |
1 | Bütünlük doğrulaması başarısız — hedef işaretlenmedi. |
2 | Kullanım hatası (eksik/yanlış parametre). |
3 | Hedef 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.