# Norden — SQLite'tan PostgreSQL'e güvenli taşıma

Tarih: 14 Eylül 2026  
Durum: Yalıtılmış Docker/PostgreSQL provası tamamlandı; production aktarımı staging ve son yedek sonrasında yapılacak

## Güvenlik sözleşmesi

- Kaynak yalnız `file:` adresli SQLite, hedef yalnız PostgreSQL olabilir.
- Hedefte herhangi bir uygulama kaydı varsa işlem veri silmeden durur. Araçta `--replace` veya dolu hedefi aşma seçeneği yoktur.
- Katalog, Gallery, pazarlar, bölüm ayarları ve denetim geçmişi taşınır.
- `--include-admin-users` verilirse yönetici ve RBAC kayıtları taşınır; bütün yöneticiler ilk girişte parola değiştirmeye zorlanır ve `lastLoginAt` temizlenir.
- `AdminSession` ve `AdminLoginAttempt` hiçbir koşulda taşınmaz. Böylece eski oturum belirteçleri yeni ortamda kullanılamaz.
- Taşıma tek PostgreSQL transaction'ında yapılır. Sonrasında her tablo adet ve SHA-256 içerik parmak iziyle kaynakla karşılaştırılır.
- Bağlantı adresleri ve parolalar komut geçmişine, Git'e, Obsidian'a veya loglara yazılmaz.

## Production/staging komutu

Bağlantı değerleri yalnız çalışılan kabuğun environment alanında bulunmalıdır:

```powershell
$env:SOURCE_DATABASE_URL = "file:./dev.db"
$env:TARGET_DATABASE_URL = "postgresql://..."
npm run db:migrate:sqlite-to-postgres -- --include-admin-users
```

Hedefe önce `prisma/migrations-postgresql/20260907000000_init` uygulanır. Production aktarımından önce yazmalar durdurulur, SQLite yedeği ve `integrity_check` alınır; aktarım sonrası staging kalite kapıları çalıştırılır. Kaynak SQLite doğrulama süresi boyunca salt okunur arşivde tutulur.

## 14 Eylül prova kanıtı

Zaman damgalı ve yalnız bu test için açılmış PostgreSQL 17 veritabanında:

| Tablo/kapsam | Aktarılan |
|---|---:|
| Category | 1 |
| Series | 7 |
| Product | 131 |
| ProductImage | 272 |
| GalleryItem | 9 |
| ExportMarket | 48 |
| SiteSection | 7 |
| AdminUser | 1 |
| AdminPermission | 0 |
| AdminAuditLog | 5 |

Kaynakta bulunan 2 admin oturumu hedefe taşınmadı; giriş denemesi kaydı 0 idi. Adet ve SHA-256 karşılaştırması geçti. Geçici test veritabanı prova sonunda kaldırıldı; çalışan `norden` prova veritabanına dokunulmadı.

Bu sonuç veri taşıma aracını doğrular; `pg_dump` yedek/restore provası, gerçek R2, staging ve production kabulü ayrıca tamamlanmalıdır.
