Files
pgsql-jellyfin/docs/QUICKSTART_POSTGRESQL.md
wjones a3eb4b1b57 Add automatic PostgreSQL database creation and migration
- Added Jellyfin.Database.Providers.Postgres project with full EF Core migration support for PostgreSQL.
- Implemented automatic database creation and privilege assignment on startup.
- Generated initial migration and model snapshot for PostgreSQL schema.
- Updated build, test, and dependency files to include PostgreSQL provider and Npgsql packages.
- Added PowerShell script for generating and testing PostgreSQL migrations.
- No changes to application logic outside database provider/migration infrastructure.
2026-02-22 18:51:24 -05:00

197 lines
4.0 KiB
Markdown

# Quick Start: PostgreSQL with Jellyfin
## 🚀 Fastest Setup Ever (2 Steps!)
### Step 1: Create PostgreSQL User
```bash
psql -U postgres -c "CREATE USER jellyfin WITH PASSWORD 'your_password' CREATEDB;"
```
### Step 2: Configure Jellyfin
Create/Edit `config/database.xml`:
```xml
<?xml version="1.0" encoding="utf-8"?>
<DatabaseConfigurationOptions>
<DatabaseType>Jellyfin-PostgreSQL</DatabaseType>
<LockingBehavior>NoLock</LockingBehavior>
<CustomProviderOptions>
<Options>
<CustomDatabaseOption>
<Key>host</Key>
<Value>localhost</Value>
</CustomDatabaseOption>
<CustomDatabaseOption>
<Key>port</Key>
<Value>5432</Value>
</CustomDatabaseOption>
<CustomDatabaseOption>
<Key>database</Key>
<Value>jellyfin</Value>
</CustomDatabaseOption>
<CustomDatabaseOption>
<Key>username</Key>
<Value>jellyfin</Value>
</CustomDatabaseOption>
<CustomDatabaseOption>
<Key>password</Key>
<Value>your_password</Value>
</CustomDatabaseOption>
</Options>
</CustomProviderOptions>
</DatabaseConfigurationOptions>
```
### Step 3: Start Jellyfin
```bash
./jellyfin
```
**That's it!** Jellyfin automatically:
- ✅ Creates the database
- ✅ Creates all 30 tables
- ✅ Sets up indexes
- ✅ Grants permissions
## What Jellyfin Does Automatically
```
Starting Jellyfin...
Checking if database 'jellyfin' exists...
Database not found - Creating...
✅ Database created!
✅ Permissions granted!
Applying migrations...
✅ All 30 tables created!
Jellyfin ready!
```
## Docker Compose
```yaml
version: '3'
services:
postgres:
image: postgres:15
environment:
POSTGRES_USER: jellyfin
POSTGRES_PASSWORD: secure_password
# No POSTGRES_DB needed - Jellyfin creates it!
volumes:
- postgres_data:/var/lib/postgresql/data
jellyfin:
image: jellyfin/jellyfin:latest
depends_on:
- postgres
volumes:
- jellyfin_config:/config
# Configure PostgreSQL via config/database.xml
volumes:
postgres_data:
jellyfin_config:
```
## Verification
### Check Database Exists
```bash
psql -U jellyfin -l | grep jellyfin
# Output: jellyfin | jellyfin | UTF8 | ...
```
### Check Tables
```bash
psql -U jellyfin -d jellyfin -c "\dt"
# Output: List of 30 tables
```
### Check Logs
```bash
tail -f <jellyfin-log-directory>/log_*.txt | grep PostgreSQL
```
Expected:
```
[INFO] Checking if PostgreSQL database exists...
[INFO] PostgreSQL database 'jellyfin' does not exist. Creating...
[INFO] PostgreSQL database 'jellyfin' created successfully
```
## Common Issues
### ❌ "permission denied to create database"
**Fix:**
```sql
ALTER USER jellyfin CREATEDB;
```
### ❌ "role 'jellyfin' does not exist"
**Fix:** Create the user (Step 1)
### ❌ "could not connect to server"
**Fix:**
- Check PostgreSQL is running: `systemctl status postgresql`
- Check host/port in config
- Check firewall
## Pro Tips
### Production Security
After first successful start, you can revoke CREATEDB:
```sql
ALTER USER jellyfin WITH NOCREATEDB;
```
### Custom Database Name
Want to use a different database name?
```xml
<CustomDatabaseOption>
<Key>database</Key>
<Value>my_custom_jellyfin_db</Value>
</CustomDatabaseOption>
```
### Multiple Jellyfin Instances
Each instance needs its own database:
```sql
CREATE USER jellyfin1 WITH PASSWORD 'pass1' CREATEDB;
CREATE USER jellyfin2 WITH PASSWORD 'pass2' CREATEDB;
```
Configure each with different database names:
- Instance 1: `database=jellyfin1`
- Instance 2: `database=jellyfin2`
## Full Documentation
- 📖 [DATABASE_CONFIGURATION.md](DATABASE_CONFIGURATION.md) - Complete setup guide
- 📖 [AUTOMATIC_DATABASE_CREATION.md](AUTOMATIC_DATABASE_CREATION.md) - Feature details
- 📖 [POSTGRESQL_TROUBLESHOOTING.md](POSTGRESQL_TROUBLESHOOTING.md) - Problem solving
## Summary
**Before:** 6 manual SQL commands + configuration
**Now:** 1 SQL command + configuration
**That's 83% less work!** 🎉