fix: enhance database script with improved permission handling and error checks
- Added permission setting for backup and temporary database files to ensure proper access. - Implemented checks for file readability and ownership adjustments to enhance robustness. - Included detailed SQL commands to fix internationalization data in the database, improving data integrity.
This commit is contained in:
@@ -16,12 +16,20 @@ fi
|
||||
BACKUP_FILE="./data/prod.db.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
echo "💾 Erstelle Backup..."
|
||||
docker cp hoerdle:/app/data/prod.db "$BACKUP_FILE"
|
||||
# Setze Berechtigungen (kann root gehören)
|
||||
sudo chmod 666 "$BACKUP_FILE" 2>/dev/null || chmod 666 "$BACKUP_FILE" 2>/dev/null || true
|
||||
echo "✅ Backup erstellt: $BACKUP_FILE"
|
||||
echo ""
|
||||
|
||||
# Kopiere DB lokal
|
||||
echo "📥 Kopiere Datenbank lokal..."
|
||||
docker cp hoerdle:/app/data/prod.db ./data/prod.db.tmp
|
||||
# Setze Berechtigungen (Datei kann root gehören)
|
||||
sudo chmod 666 ./data/prod.db.tmp 2>/dev/null || chmod 666 ./data/prod.db.tmp 2>/dev/null || {
|
||||
echo "⚠️ Konnte Berechtigungen nicht setzen. Versuche mit sudo..."
|
||||
sudo chmod 666 ./data/prod.db.tmp
|
||||
}
|
||||
chmod 775 ./data 2>/dev/null || sudo chmod 775 ./data 2>/dev/null || true
|
||||
echo "✅ Datenbank kopiert"
|
||||
echo ""
|
||||
|
||||
@@ -34,10 +42,18 @@ fi
|
||||
|
||||
# Fixe die Datenbank
|
||||
echo "🔧 Fixe i18n-Daten..."
|
||||
sqlite3 ./data/prod.db.tmp << 'SQL'
|
||||
-- Backup innerhalb der DB
|
||||
.backup ./data/prod.db.tmp.backup
|
||||
# Stelle sicher, dass wir Schreibrechte haben (auch für WAL-Dateien)
|
||||
chmod 666 ./data/prod.db.tmp 2>/dev/null || sudo chmod 666 ./data/prod.db.tmp
|
||||
chmod 775 ./data 2>/dev/null || sudo chmod 775 ./data
|
||||
# Prüfe ob wir die Datei lesen können
|
||||
if [ ! -r "./data/prod.db.tmp" ]; then
|
||||
echo "❌ Kann Datenbankdatei nicht lesen. Setze Besitzer..."
|
||||
sudo chown $(whoami):$(whoami) ./data/prod.db.tmp || true
|
||||
fi
|
||||
|
||||
# Führe SQL-Befehle aus (mit sudo falls nötig)
|
||||
if [ -r "./data/prod.db.tmp" ] && [ -w "./data" ]; then
|
||||
sqlite3 ./data/prod.db.tmp << 'SQL'
|
||||
-- Fix Genre.name
|
||||
UPDATE Genre
|
||||
SET name = json_object('de', name, 'en', name)
|
||||
@@ -70,6 +86,43 @@ WHERE typeof(content) = 'text' AND content NOT LIKE '{%';
|
||||
|
||||
SELECT '✅ Alle i18n-Daten wurden gefixt!' as status;
|
||||
SQL
|
||||
else
|
||||
echo "❌ Kann Datenbankdatei nicht lesen oder schreiben!"
|
||||
echo " Versuche mit sudo..."
|
||||
sudo sqlite3 ./data/prod.db.tmp << 'SQL'
|
||||
-- Fix Genre.name
|
||||
UPDATE Genre
|
||||
SET name = json_object('de', name, 'en', name)
|
||||
WHERE typeof(name) = 'text' AND name NOT LIKE '{%';
|
||||
|
||||
-- Fix Genre.subtitle
|
||||
UPDATE Genre
|
||||
SET subtitle = json_object('de', subtitle, 'en', subtitle)
|
||||
WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%';
|
||||
|
||||
-- Fix Special.name
|
||||
UPDATE Special
|
||||
SET name = json_object('de', name, 'en', name)
|
||||
WHERE typeof(name) = 'text' AND name NOT LIKE '{%';
|
||||
|
||||
-- Fix Special.subtitle
|
||||
UPDATE Special
|
||||
SET subtitle = json_object('de', subtitle, 'en', subtitle)
|
||||
WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%';
|
||||
|
||||
-- Fix News.title
|
||||
UPDATE News
|
||||
SET title = json_object('de', title, 'en', title)
|
||||
WHERE typeof(title) = 'text' AND title NOT LIKE '{%';
|
||||
|
||||
-- Fix News.content
|
||||
UPDATE News
|
||||
SET content = json_object('de', content, 'en', content)
|
||||
WHERE typeof(content) = 'text' AND content NOT LIKE '{%';
|
||||
|
||||
SELECT '✅ Alle i18n-Daten wurden gefixt!' as status;
|
||||
SQL
|
||||
fi
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Fehler beim Fixen der Datenbank!"
|
||||
|
||||
Reference in New Issue
Block a user