135b6a81b9
Added README section describing the web client directory (`wwwroot`) and its configuration options. No code logic changes; only environment and documentation updates.
91 lines
4.0 KiB
Markdown
91 lines
4.0 KiB
Markdown
# Database Table Verification and Auto-Creation Feature
|
|
|
|
## Overview
|
|
Added automatic database table verification and creation during Jellyfin startup. This ensures all required tables exist and automatically applies any pending Entity Framework Core migrations.
|
|
|
|
## Changes Made
|
|
|
|
### 1. Interface Update
|
|
**File**: `src/Jellyfin.Database/Jellyfin.Database.Implementations/IJellyfinDatabaseProvider.cs`
|
|
- Added `EnsureTablesExistAsync` method to the `IJellyfinDatabaseProvider` interface
|
|
- This method is responsible for checking and creating missing database tables
|
|
|
|
### 2. PostgreSQL Provider Implementation
|
|
**File**: `src/Jellyfin.Database/Jellyfin.Database.Providers.Postgres/PostgresDatabaseProvider.cs`
|
|
- Implemented `EnsureTablesExistAsync` method
|
|
- Checks for pending EF Core migrations
|
|
- Applies migrations if needed using `Database.MigrateAsync()`
|
|
- Verifies each schema (activitylog, authentication, displaypreferences, library, users) contains tables
|
|
- Logs warnings if schemas exist but contain no tables
|
|
- Provides detailed logging throughout the process
|
|
|
|
### 3. SQLite Provider Implementation
|
|
**File**: `src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs`
|
|
- Implemented `EnsureTablesExistAsync` method for SQLite
|
|
- Checks for pending migrations
|
|
- Applies migrations if needed
|
|
- Verifies database integrity
|
|
- Logs table count and completion status
|
|
|
|
### 4. Startup Integration
|
|
**File**: `Jellyfin.Server/Program.cs`
|
|
- Added call to `EnsureTablesExistAsync` in the `StartServer` method
|
|
- Executes after `PrepareDatabaseProvider` but before backup restoration
|
|
- Runs early in the startup process to ensure database is ready
|
|
|
|
## How It Works
|
|
|
|
1. **During Startup**: After the database provider is prepared, the system calls `EnsureTablesExistAsync()`
|
|
2. **Migration Check**: The method checks if there are any pending EF Core migrations
|
|
3. **Migration Application**: If migrations are pending, they are automatically applied
|
|
4. **Table Verification**: The method verifies that all expected schemas contain tables
|
|
5. **Logging**: Detailed logs are provided for each step:
|
|
- Number of pending migrations found
|
|
- Migration application progress
|
|
- Schema verification results
|
|
- Warnings for empty schemas
|
|
|
|
## Benefits
|
|
|
|
- **Automatic Recovery**: Automatically fixes missing tables by applying migrations
|
|
- **Early Detection**: Catches database schema issues during startup before they cause runtime errors
|
|
- **Detailed Logging**: Provides clear visibility into what's happening with the database
|
|
- **Prevention**: Prevents errors like "relation does not exist" by ensuring all tables are created
|
|
- **Both Databases**: Works for both PostgreSQL and SQLite providers
|
|
|
|
## Example Logs
|
|
|
|
When the system starts and finds missing tables:
|
|
```
|
|
[INF] Checking PostgreSQL database for missing tables...
|
|
[INF] Found 3 pending migrations. Applying migrations...
|
|
[INF] Successfully applied 3 migrations
|
|
[DBG] Schema 'activitylog' contains 1 tables
|
|
[DBG] Schema 'authentication' contains 3 tables
|
|
[DBG] Schema 'displaypreferences' contains 4 tables
|
|
[DBG] Schema 'library' contains 15 tables
|
|
[DBG] Schema 'users' contains 4 tables
|
|
[INF] Database table verification complete
|
|
```
|
|
|
|
When everything is up to date:
|
|
```
|
|
[INF] Checking PostgreSQL database for missing tables...
|
|
[INF] All database tables are up to date. No migrations needed.
|
|
[INF] Database table verification complete
|
|
```
|
|
|
|
## Testing Recommendations
|
|
|
|
1. **Fresh Database**: Test with a completely new database to verify migrations are applied
|
|
2. **Partial Database**: Test with a database missing some tables to ensure they're created
|
|
3. **Complete Database**: Test with an up-to-date database to ensure it skips unnecessary work
|
|
4. **Schema Verification**: Verify that the warning logs appear if schemas exist but are empty
|
|
|
|
## Notes
|
|
|
|
- The method is called automatically during startup - no configuration needed
|
|
- Migrations are applied in the correct order as defined by EF Core
|
|
- The process will throw exceptions if migrations fail, preventing startup with a broken database
|
|
- Both PostgreSQL and SQLite providers are fully supported
|