# 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
Jellyfin-PostgreSQL
NoLock
host
localhost
port
5432
database
jellyfin
username
jellyfin
password
your_password
```
### 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 /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
database
my_custom_jellyfin_db
```
### 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!** 🎉