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.
This commit is contained in:
2026-02-22 18:51:24 -05:00
parent 0efab2cfb6
commit a3eb4b1b57
52 changed files with 9233 additions and 33 deletions
@@ -967,6 +967,40 @@
}
}
},
"Npgsql/10.0.0": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0"
},
"compile": {
"lib/net10.0/Npgsql.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net10.0/Npgsql.dll": {
"related": ".xml"
}
}
},
"Npgsql.EntityFrameworkCore.PostgreSQL/11.0.0-preview.1": {
"type": "package",
"dependencies": {
"Microsoft.EntityFrameworkCore": "[11.0.0-preview.1.26104.118]",
"Microsoft.EntityFrameworkCore.Relational": "[11.0.0-preview.1.26104.118]",
"Npgsql": "10.0.0"
},
"compile": {
"lib/net11.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net11.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
"related": ".xml"
}
}
},
"PlaylistsNET/1.4.1": {
"type": "package",
"compile": {
@@ -1540,6 +1574,24 @@
"bin/placeholder/Jellyfin.Database.Implementations.dll": {}
}
},
"Jellyfin.Database.Providers.Postgres/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Common": "10.12.0",
"Jellyfin.Database.Implementations": "10.11.0",
"Microsoft.EntityFrameworkCore": "11.0.0-preview.1.26104.118",
"Microsoft.EntityFrameworkCore.Relational": "11.0.0-preview.1.26104.118",
"Npgsql.EntityFrameworkCore.PostgreSQL": "11.0.0-preview.1"
},
"compile": {
"bin/placeholder/Jellyfin.Database.Providers.Postgres.dll": {}
},
"runtime": {
"bin/placeholder/Jellyfin.Database.Providers.Postgres.dll": {}
}
},
"Jellyfin.Database.Providers.Sqlite/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
@@ -1683,6 +1735,7 @@
"Jellyfin.Controller": "10.12.0",
"Jellyfin.Data": "10.12.0",
"Jellyfin.Database.Implementations": "10.11.0",
"Jellyfin.Database.Providers.Postgres": "1.0.0",
"Jellyfin.Database.Providers.Sqlite": "1.0.0",
"Jellyfin.Model": "10.12.0",
"Jellyfin.Sdk": "2025.10.21",
@@ -3391,6 +3444,40 @@
"packageIcon.png"
]
},
"Npgsql/10.0.0": {
"sha512": "xZAYhPOU2rUIFpV48xsqhCx9vXs6Y+0jX2LCoSEfDFYMw9jtAOUk3iQsCnDLrFIv9NT3JGMihn7nnuZsPKqJmA==",
"type": "package",
"path": "npgsql/10.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net10.0/Npgsql.dll",
"lib/net10.0/Npgsql.xml",
"lib/net8.0/Npgsql.dll",
"lib/net8.0/Npgsql.xml",
"lib/net9.0/Npgsql.dll",
"lib/net9.0/Npgsql.xml",
"npgsql.10.0.0.nupkg.sha512",
"npgsql.nuspec",
"postgresql.png"
]
},
"Npgsql.EntityFrameworkCore.PostgreSQL/11.0.0-preview.1": {
"sha512": "zpg0hmbw7f3B0deg1vENgqfNWuas3lcR6c8D7VNwa7HxNLnnNcXp4ABf5ywUYjZzAJOToCy5UH0VV9rtnxWcKQ==",
"type": "package",
"path": "npgsql.entityframeworkcore.postgresql/11.0.0-preview.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net11.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll",
"lib/net11.0/Npgsql.EntityFrameworkCore.PostgreSQL.xml",
"npgsql.entityframeworkcore.postgresql.11.0.0-preview.1.nupkg.sha512",
"npgsql.entityframeworkcore.postgresql.nuspec",
"postgresql.png"
]
},
"PlaylistsNET/1.4.1": {
"sha512": "GmDShQkKK08YJD94rOoWebe3M2QRk6XZkMcPL80ZcRnFs255kifAJt7I9n6mmSlcQc/BRpgiY3jHDIOxIqA/cA==",
"type": "package",
@@ -3986,6 +4073,11 @@
"path": "../src/Jellyfin.Database/Jellyfin.Database.Implementations/Jellyfin.Database.Implementations.csproj",
"msbuildProject": "../src/Jellyfin.Database/Jellyfin.Database.Implementations/Jellyfin.Database.Implementations.csproj"
},
"Jellyfin.Database.Providers.Postgres/1.0.0": {
"type": "project",
"path": "../src/Jellyfin.Database/Jellyfin.Database.Providers.Postgres/Jellyfin.Database.Providers.Postgres.csproj",
"msbuildProject": "../src/Jellyfin.Database/Jellyfin.Database.Providers.Postgres/Jellyfin.Database.Providers.Postgres.csproj"
},
"Jellyfin.Database.Providers.Sqlite/1.0.0": {
"type": "project",
"path": "../src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/Jellyfin.Database.Providers.Sqlite.csproj",