Files
pgsql-jellyfin/postgres-migration.sql
T
wjones 24ae417a39 PostgreSQL migration: schema fixes, docs, and tooling
- Assign all tables to correct PostgreSQL schemas in EF Core migrations
- Fix identifier quoting: replace SQL Server brackets with PostgreSQL double quotes
- Use InsertData for placeholder BaseItems row (no raw SQL)
- Remove obsolete/Windows publish profiles; set Linux as default
- Add detailed migration success and verification reports (Markdown)
- Add idempotent, production-ready SQL migration scripts
- Add PowerShell script for automated migration verification
- Ensures robust, production-ready PostgreSQL migration and documentation
2026-02-26 12:16:47 -05:00

1034 lines
38 KiB
SQL

CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" (
"MigrationId" character varying(150) NOT NULL,
"ProductVersion" character varying(32) NOT NULL,
CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId")
);
START TRANSACTION;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
IF NOT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'activitylog') THEN
CREATE SCHEMA activitylog;
END IF;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
IF NOT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'authentication') THEN
CREATE SCHEMA authentication;
END IF;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
IF NOT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'displaypreferences') THEN
CREATE SCHEMA displaypreferences;
END IF;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
IF NOT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'library') THEN
CREATE SCHEMA library;
END IF;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
IF NOT EXISTS(SELECT 1 FROM pg_namespace WHERE nspname = 'users') THEN
CREATE SCHEMA users;
END IF;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE activitylog."ActivityLogs" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"Name" character varying(512) NOT NULL,
"Overview" character varying(512),
"ShortOverview" character varying(512),
"Type" character varying(256) NOT NULL,
"UserId" uuid NOT NULL,
"ItemId" character varying(256),
"DateCreated" timestamp with time zone NOT NULL,
"LogSeverity" integer NOT NULL,
"RowVersion" bigint NOT NULL,
CONSTRAINT "PK_ActivityLogs" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE authentication."ApiKeys" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"DateCreated" timestamp with time zone NOT NULL,
"DateLastActivity" timestamp with time zone NOT NULL,
"Name" character varying(64) NOT NULL,
"AccessToken" text NOT NULL,
CONSTRAINT "PK_ApiKeys" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."BaseItems" (
"Id" uuid NOT NULL,
"Type" text NOT NULL,
"Data" text,
"Path" text,
"StartDate" timestamp with time zone,
"EndDate" timestamp with time zone,
"ChannelId" uuid,
"IsMovie" boolean NOT NULL,
"CommunityRating" real,
"CustomRating" text,
"IndexNumber" integer,
"IsLocked" boolean NOT NULL,
"Name" text,
"OfficialRating" text,
"MediaType" text,
"Overview" text,
"ParentIndexNumber" integer,
"PremiereDate" timestamp with time zone,
"ProductionYear" integer,
"Genres" text,
"SortName" text,
"ForcedSortName" text,
"RunTimeTicks" bigint,
"DateCreated" timestamp with time zone,
"DateModified" timestamp with time zone,
"IsSeries" boolean NOT NULL,
"EpisodeTitle" text,
"IsRepeat" boolean NOT NULL,
"PreferredMetadataLanguage" text,
"PreferredMetadataCountryCode" text,
"DateLastRefreshed" timestamp with time zone,
"DateLastSaved" timestamp with time zone,
"IsInMixedFolder" boolean NOT NULL,
"Studios" text,
"ExternalServiceId" text,
"Tags" text,
"IsFolder" boolean NOT NULL,
"InheritedParentalRatingValue" integer,
"InheritedParentalRatingSubValue" integer,
"UnratedType" text,
"CriticRating" real,
"CleanName" text,
"PresentationUniqueKey" text,
"OriginalTitle" text,
"PrimaryVersionId" text,
"DateLastMediaAdded" timestamp with time zone,
"Album" text,
"LUFS" real,
"NormalizationGain" real,
"IsVirtualItem" boolean NOT NULL,
"SeriesName" text,
"SeasonName" text,
"ExternalSeriesId" text,
"Tagline" text,
"ProductionLocations" text,
"ExtraIds" text,
"TotalBitrate" integer,
"ExtraType" integer,
"Artists" text,
"AlbumArtists" text,
"ExternalId" text,
"SeriesPresentationUniqueKey" text,
"ShowId" text,
"OwnerId" text,
"Width" integer,
"Height" integer,
"Size" bigint,
"Audio" integer,
"ParentId" uuid,
"TopParentId" uuid,
"SeasonId" uuid,
"SeriesId" uuid,
CONSTRAINT "PK_BaseItems" PRIMARY KEY ("Id"),
CONSTRAINT "FK_BaseItems_BaseItems_ParentId" FOREIGN KEY ("ParentId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE displaypreferences."CustomItemDisplayPreferences" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid NOT NULL,
"ItemId" uuid NOT NULL,
"Client" character varying(32) NOT NULL,
"Key" text NOT NULL,
"Value" text,
CONSTRAINT "PK_CustomItemDisplayPreferences" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE authentication."DeviceOptions" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"DeviceId" text NOT NULL,
"CustomName" text,
CONSTRAINT "PK_DeviceOptions" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."ItemValues" (
"ItemValueId" uuid NOT NULL,
"Type" integer NOT NULL,
"Value" text NOT NULL,
"CleanValue" text NOT NULL,
CONSTRAINT "PK_ItemValues" PRIMARY KEY ("ItemValueId")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."MediaSegments" (
"Id" uuid NOT NULL,
"ItemId" uuid NOT NULL,
"Type" integer NOT NULL,
"EndTicks" bigint NOT NULL,
"StartTicks" bigint NOT NULL,
"SegmentProviderId" text NOT NULL,
CONSTRAINT "PK_MediaSegments" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."Peoples" (
"Id" uuid NOT NULL,
"Name" text NOT NULL,
"PersonType" text,
CONSTRAINT "PK_Peoples" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."TrickplayInfos" (
"ItemId" uuid NOT NULL,
"Width" integer NOT NULL,
"Height" integer NOT NULL,
"TileWidth" integer NOT NULL,
"TileHeight" integer NOT NULL,
"ThumbnailCount" integer NOT NULL,
"Interval" integer NOT NULL,
"Bandwidth" integer NOT NULL,
CONSTRAINT "PK_TrickplayInfos" PRIMARY KEY ("ItemId", "Width")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE users."Users" (
"Id" uuid NOT NULL,
"Username" character varying(255) NOT NULL,
"Password" character varying(65535),
"MustUpdatePassword" boolean NOT NULL,
"AudioLanguagePreference" character varying(255),
"AuthenticationProviderId" character varying(255) NOT NULL,
"PasswordResetProviderId" character varying(255) NOT NULL,
"InvalidLoginAttemptCount" integer NOT NULL,
"LastActivityDate" timestamp with time zone,
"LastLoginDate" timestamp with time zone,
"LoginAttemptsBeforeLockout" integer,
"MaxActiveSessions" integer NOT NULL,
"SubtitleMode" integer NOT NULL,
"PlayDefaultAudioTrack" boolean NOT NULL,
"SubtitleLanguagePreference" character varying(255),
"DisplayMissingEpisodes" boolean NOT NULL,
"DisplayCollectionsView" boolean NOT NULL,
"EnableLocalPassword" boolean NOT NULL,
"HidePlayedInLatest" boolean NOT NULL,
"RememberAudioSelections" boolean NOT NULL,
"RememberSubtitleSelections" boolean NOT NULL,
"EnableNextEpisodeAutoPlay" boolean NOT NULL,
"EnableAutoLogin" boolean NOT NULL,
"EnableUserPreferenceAccess" boolean NOT NULL,
"MaxParentalRatingScore" integer,
"MaxParentalRatingSubScore" integer,
"RemoteClientBitrateLimit" integer,
"InternalId" bigint NOT NULL,
"SyncPlayAccess" integer NOT NULL,
"CastReceiverId" character varying(32),
"RowVersion" bigint NOT NULL,
CONSTRAINT "PK_Users" PRIMARY KEY ("Id")
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."AncestorIds" (
"ParentItemId" uuid NOT NULL,
"ItemId" uuid NOT NULL,
CONSTRAINT "PK_AncestorIds" PRIMARY KEY ("ItemId", "ParentItemId"),
CONSTRAINT "FK_AncestorIds_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE,
CONSTRAINT "FK_AncestorIds_BaseItems_ParentItemId" FOREIGN KEY ("ParentItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."AttachmentStreamInfos" (
"ItemId" uuid NOT NULL,
"Index" integer NOT NULL,
"Codec" text,
"CodecTag" text,
"Comment" text,
"Filename" text,
"MimeType" text,
CONSTRAINT "PK_AttachmentStreamInfos" PRIMARY KEY ("ItemId", "Index"),
CONSTRAINT "FK_AttachmentStreamInfos_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."BaseItemImageInfos" (
"Id" uuid NOT NULL,
"Path" text NOT NULL,
"DateModified" timestamp with time zone,
"ImageType" integer NOT NULL,
"Width" integer NOT NULL,
"Height" integer NOT NULL,
"Blurhash" bytea,
"ItemId" uuid NOT NULL,
CONSTRAINT "PK_BaseItemImageInfos" PRIMARY KEY ("Id"),
CONSTRAINT "FK_BaseItemImageInfos_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."BaseItemMetadataFields" (
"Id" integer NOT NULL,
"ItemId" uuid NOT NULL,
CONSTRAINT "PK_BaseItemMetadataFields" PRIMARY KEY ("Id", "ItemId"),
CONSTRAINT "FK_BaseItemMetadataFields_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."BaseItemProviders" (
"ItemId" uuid NOT NULL,
"ProviderId" text NOT NULL,
"ProviderValue" text NOT NULL,
CONSTRAINT "PK_BaseItemProviders" PRIMARY KEY ("ItemId", "ProviderId"),
CONSTRAINT "FK_BaseItemProviders_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."BaseItemTrailerTypes" (
"Id" integer NOT NULL,
"ItemId" uuid NOT NULL,
CONSTRAINT "PK_BaseItemTrailerTypes" PRIMARY KEY ("Id", "ItemId"),
CONSTRAINT "FK_BaseItemTrailerTypes_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."Chapters" (
"ItemId" uuid NOT NULL,
"ChapterIndex" integer NOT NULL,
"StartPositionTicks" bigint NOT NULL,
"Name" text,
"ImagePath" text,
"ImageDateModified" timestamp with time zone,
CONSTRAINT "PK_Chapters" PRIMARY KEY ("ItemId", "ChapterIndex"),
CONSTRAINT "FK_Chapters_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."KeyframeData" (
"ItemId" uuid NOT NULL,
"TotalDuration" bigint NOT NULL,
"KeyframeTicks" bigint[],
CONSTRAINT "PK_KeyframeData" PRIMARY KEY ("ItemId"),
CONSTRAINT "FK_KeyframeData_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."MediaStreamInfos" (
"ItemId" uuid NOT NULL,
"StreamIndex" integer NOT NULL,
"StreamType" integer NOT NULL,
"Codec" text,
"Language" text,
"ChannelLayout" text,
"Profile" text,
"AspectRatio" text,
"Path" text,
"IsInterlaced" boolean,
"BitRate" integer,
"Channels" integer,
"SampleRate" integer,
"IsDefault" boolean NOT NULL,
"IsForced" boolean NOT NULL,
"IsExternal" boolean NOT NULL,
"Height" integer,
"Width" integer,
"AverageFrameRate" real,
"RealFrameRate" real,
"Level" real,
"PixelFormat" text,
"BitDepth" integer,
"IsAnamorphic" boolean,
"RefFrames" integer,
"CodecTag" text,
"Comment" text,
"NalLengthSize" text,
"IsAvc" boolean,
"Title" text,
"TimeBase" text,
"CodecTimeBase" text,
"ColorPrimaries" text,
"ColorSpace" text,
"ColorTransfer" text,
"DvVersionMajor" integer,
"DvVersionMinor" integer,
"DvProfile" integer,
"DvLevel" integer,
"RpuPresentFlag" integer,
"ElPresentFlag" integer,
"BlPresentFlag" integer,
"DvBlSignalCompatibilityId" integer,
"IsHearingImpaired" boolean,
"Rotation" integer,
"KeyFrames" text,
"Hdr10PlusPresentFlag" boolean,
CONSTRAINT "PK_MediaStreamInfos" PRIMARY KEY ("ItemId", "StreamIndex"),
CONSTRAINT "FK_MediaStreamInfos_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."ItemValuesMap" (
"ItemId" uuid NOT NULL,
"ItemValueId" uuid NOT NULL,
CONSTRAINT "PK_ItemValuesMap" PRIMARY KEY ("ItemValueId", "ItemId"),
CONSTRAINT "FK_ItemValuesMap_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE,
CONSTRAINT "FK_ItemValuesMap_ItemValues_ItemValueId" FOREIGN KEY ("ItemValueId") REFERENCES library."ItemValues" ("ItemValueId") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."PeopleBaseItemMap" (
"Role" text NOT NULL,
"ItemId" uuid NOT NULL,
"PeopleId" uuid NOT NULL,
"SortOrder" integer,
"ListOrder" integer,
CONSTRAINT "PK_PeopleBaseItemMap" PRIMARY KEY ("ItemId", "PeopleId", "Role"),
CONSTRAINT "FK_PeopleBaseItemMap_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE,
CONSTRAINT "FK_PeopleBaseItemMap_Peoples_PeopleId" FOREIGN KEY ("PeopleId") REFERENCES library."Peoples" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE users."AccessSchedules" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid NOT NULL,
"DayOfWeek" integer NOT NULL,
"StartHour" double precision NOT NULL,
"EndHour" double precision NOT NULL,
CONSTRAINT "PK_AccessSchedules" PRIMARY KEY ("Id"),
CONSTRAINT "FK_AccessSchedules_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE authentication."Devices" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid NOT NULL,
"AccessToken" text NOT NULL,
"AppName" character varying(64) NOT NULL,
"AppVersion" character varying(32) NOT NULL,
"DeviceName" character varying(64) NOT NULL,
"DeviceId" character varying(256) NOT NULL,
"IsActive" boolean NOT NULL,
"DateCreated" timestamp with time zone NOT NULL,
"DateModified" timestamp with time zone NOT NULL,
"DateLastActivity" timestamp with time zone NOT NULL,
CONSTRAINT "PK_Devices" PRIMARY KEY ("Id"),
CONSTRAINT "FK_Devices_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE displaypreferences."DisplayPreferences" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid NOT NULL,
"ItemId" uuid NOT NULL,
"Client" character varying(32) NOT NULL,
"ShowSidebar" boolean NOT NULL,
"ShowBackdrop" boolean NOT NULL,
"ScrollDirection" integer NOT NULL,
"IndexBy" integer,
"SkipForwardLength" integer NOT NULL,
"SkipBackwardLength" integer NOT NULL,
"ChromecastVersion" integer NOT NULL,
"EnableNextVideoInfoOverlay" boolean NOT NULL,
"DashboardTheme" character varying(32),
"TvHome" character varying(32),
CONSTRAINT "PK_DisplayPreferences" PRIMARY KEY ("Id"),
CONSTRAINT "FK_DisplayPreferences_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."ImageInfos" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid,
"Path" character varying(512) NOT NULL,
"LastModified" timestamp with time zone NOT NULL,
CONSTRAINT "PK_ImageInfos" PRIMARY KEY ("Id"),
CONSTRAINT "FK_ImageInfos_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE displaypreferences."ItemDisplayPreferences" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid NOT NULL,
"ItemId" uuid NOT NULL,
"Client" character varying(32) NOT NULL,
"ViewType" integer NOT NULL,
"RememberIndexing" boolean NOT NULL,
"IndexBy" integer,
"RememberSorting" boolean NOT NULL,
"SortBy" character varying(64) NOT NULL,
"SortOrder" integer NOT NULL,
CONSTRAINT "PK_ItemDisplayPreferences" PRIMARY KEY ("Id"),
CONSTRAINT "FK_ItemDisplayPreferences_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE users."Permissions" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid,
"Kind" integer NOT NULL,
"Value" boolean NOT NULL,
"RowVersion" bigint NOT NULL,
"Permission_Permissions_Guid" uuid,
CONSTRAINT "PK_Permissions" PRIMARY KEY ("Id"),
CONSTRAINT "FK_Permissions_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE users."Preferences" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"UserId" uuid,
"Kind" integer NOT NULL,
"Value" character varying(65535) NOT NULL,
"RowVersion" bigint NOT NULL,
"Preference_Preferences_Guid" uuid,
CONSTRAINT "PK_Preferences" PRIMARY KEY ("Id"),
CONSTRAINT "FK_Preferences_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE library."UserData" (
"CustomDataKey" text NOT NULL,
"ItemId" uuid NOT NULL,
"UserId" uuid NOT NULL,
"Rating" double precision,
"PlaybackPositionTicks" bigint NOT NULL,
"PlayCount" integer NOT NULL,
"IsFavorite" boolean NOT NULL,
"LastPlayedDate" timestamp with time zone,
"Played" boolean NOT NULL,
"AudioStreamIndex" integer,
"SubtitleStreamIndex" integer,
"Likes" boolean,
"RetentionDate" timestamp with time zone,
CONSTRAINT "PK_UserData" PRIMARY KEY ("ItemId", "UserId", "CustomDataKey"),
CONSTRAINT "FK_UserData_BaseItems_ItemId" FOREIGN KEY ("ItemId") REFERENCES library."BaseItems" ("Id") ON DELETE CASCADE,
CONSTRAINT "FK_UserData_Users_UserId" FOREIGN KEY ("UserId") REFERENCES users."Users" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE TABLE displaypreferences."HomeSection" (
"Id" integer GENERATED BY DEFAULT AS IDENTITY,
"DisplayPreferencesId" integer NOT NULL,
"Order" integer NOT NULL,
"Type" integer NOT NULL,
CONSTRAINT "PK_HomeSection" PRIMARY KEY ("Id"),
CONSTRAINT "FK_HomeSection_DisplayPreferences_DisplayPreferencesId" FOREIGN KEY ("DisplayPreferencesId") REFERENCES displaypreferences."DisplayPreferences" ("Id") ON DELETE CASCADE
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
INSERT INTO library."BaseItems" (
"Id", "Type", "Name", "IsFolder", "IsInMixedFolder", "IsLocked", "IsMovie",
"IsRepeat", "IsSeries", "IsVirtualItem"
)
VALUES (
'00000000-0000-0000-0000-000000000001'::uuid,
'PLACEHOLDER',
'This is a placeholder item for UserData that has been detacted from its original item',
false, false, false, false, false, false, false
);
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_AccessSchedules_UserId" ON users."AccessSchedules" ("UserId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_ActivityLogs_DateCreated" ON activitylog."ActivityLogs" ("DateCreated");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_AncestorIds_ParentItemId" ON library."AncestorIds" ("ParentItemId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_ApiKeys_AccessToken" ON authentication."ApiKeys" ("AccessToken");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItemImageInfos_ItemId" ON library."BaseItemImageInfos" ("ItemId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItemMetadataFields_ItemId" ON library."BaseItemMetadataFields" ("ItemId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItemProviders_ProviderId_ProviderValue_ItemId" ON library."BaseItemProviders" ("ProviderId", "ProviderValue", "ItemId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Id_Type_IsFolder_IsVirtualItem" ON library."BaseItems" ("Id", "Type", "IsFolder", "IsVirtualItem");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_IsFolder_TopParentId_IsVirtualItem_PresentationUn~" ON library."BaseItems" ("IsFolder", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_MediaType_TopParentId_IsVirtualItem_PresentationU~" ON library."BaseItems" ("MediaType", "TopParentId", "IsVirtualItem", "PresentationUniqueKey");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_ParentId" ON library."BaseItems" ("ParentId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Path" ON library."BaseItems" ("Path");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_PresentationUniqueKey" ON library."BaseItems" ("PresentationUniqueKey");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_TopParentId_Id" ON library."BaseItems" ("TopParentId", "Id");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Type_SeriesPresentationUniqueKey_IsFolder_IsVirtu~" ON library."BaseItems" ("Type", "SeriesPresentationUniqueKey", "IsFolder", "IsVirtualItem");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Type_SeriesPresentationUniqueKey_PresentationUniq~" ON library."BaseItems" ("Type", "SeriesPresentationUniqueKey", "PresentationUniqueKey", "SortName");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Type_TopParentId_Id" ON library."BaseItems" ("Type", "TopParentId", "Id");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Type_TopParentId_IsVirtualItem_PresentationUnique~" ON library."BaseItems" ("Type", "TopParentId", "IsVirtualItem", "PresentationUniqueKey", "DateCreated");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Type_TopParentId_PresentationUniqueKey" ON library."BaseItems" ("Type", "TopParentId", "PresentationUniqueKey");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItems_Type_TopParentId_StartDate" ON library."BaseItems" ("Type", "TopParentId", "StartDate");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_BaseItemTrailerTypes_ItemId" ON library."BaseItemTrailerTypes" ("ItemId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_CustomItemDisplayPreferences_UserId_ItemId_Client_Key" ON displaypreferences."CustomItemDisplayPreferences" ("UserId", "ItemId", "Client", "Key");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_DeviceOptions_DeviceId" ON authentication."DeviceOptions" ("DeviceId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_Devices_AccessToken_DateLastActivity" ON authentication."Devices" ("AccessToken", "DateLastActivity");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_Devices_DeviceId" ON authentication."Devices" ("DeviceId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_Devices_DeviceId_DateLastActivity" ON authentication."Devices" ("DeviceId", "DateLastActivity");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_Devices_UserId_DeviceId" ON authentication."Devices" ("UserId", "DeviceId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_DisplayPreferences_UserId_ItemId_Client" ON displaypreferences."DisplayPreferences" ("UserId", "ItemId", "Client");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_HomeSection_DisplayPreferencesId" ON displaypreferences."HomeSection" ("DisplayPreferencesId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_ImageInfos_UserId" ON library."ImageInfos" ("UserId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_ItemDisplayPreferences_UserId" ON displaypreferences."ItemDisplayPreferences" ("UserId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_ItemValues_Type_CleanValue" ON library."ItemValues" ("Type", "CleanValue");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_ItemValues_Type_Value" ON library."ItemValues" ("Type", "Value");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_ItemValuesMap_ItemId" ON library."ItemValuesMap" ("ItemId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_MediaStreamInfos_StreamIndex" ON library."MediaStreamInfos" ("StreamIndex");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_MediaStreamInfos_StreamIndex_StreamType" ON library."MediaStreamInfos" ("StreamIndex", "StreamType");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_MediaStreamInfos_StreamIndex_StreamType_Language" ON library."MediaStreamInfos" ("StreamIndex", "StreamType", "Language");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_MediaStreamInfos_StreamType" ON library."MediaStreamInfos" ("StreamType");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_PeopleBaseItemMap_ItemId_ListOrder" ON library."PeopleBaseItemMap" ("ItemId", "ListOrder");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_PeopleBaseItemMap_ItemId_SortOrder" ON library."PeopleBaseItemMap" ("ItemId", "SortOrder");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_PeopleBaseItemMap_PeopleId" ON library."PeopleBaseItemMap" ("PeopleId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_Peoples_Name" ON library."Peoples" ("Name");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_Permissions_UserId_Kind" ON users."Permissions" ("UserId", "Kind") WHERE "UserId" IS NOT NULL;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_Preferences_UserId_Kind" ON users."Preferences" ("UserId", "Kind") WHERE "UserId" IS NOT NULL;
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_UserData_ItemId_UserId_IsFavorite" ON library."UserData" ("ItemId", "UserId", "IsFavorite");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_UserData_ItemId_UserId_LastPlayedDate" ON library."UserData" ("ItemId", "UserId", "LastPlayedDate");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_UserData_ItemId_UserId_PlaybackPositionTicks" ON library."UserData" ("ItemId", "UserId", "PlaybackPositionTicks");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_UserData_ItemId_UserId_Played" ON library."UserData" ("ItemId", "UserId", "Played");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE INDEX "IX_UserData_UserId" ON library."UserData" ("UserId");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
CREATE UNIQUE INDEX "IX_Users_Username" ON users."Users" ("Username");
END IF;
END $EF$;
DO $EF$
BEGIN
IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '20260222222702_InitialCreate') THEN
INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion")
VALUES ('20260222222702_InitialCreate', '11.0.0-preview.1.26104.118');
END IF;
END $EF$;
COMMIT;