-- Verweise an einem CC: Addon des Erstellers, Modell, Absprachen. CREATE TABLE IF NOT EXISTS "CharacterLink" ( "id" SERIAL NOT NULL, "characterId" INTEGER NOT NULL, "label" TEXT NOT NULL, "url" TEXT NOT NULL, "createdById" INTEGER, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "CharacterLink_pkey" PRIMARY KEY ("id") ); CREATE INDEX IF NOT EXISTS "CharacterLink_characterId_idx" ON "CharacterLink"("characterId"); DO $$ BEGIN ALTER TABLE "CharacterLink" ADD CONSTRAINT "CharacterLink_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$; -- Platz in der Redesign-Kette. Bisher ergab sich die Reihenfolge allein aus -- der Verkettung; zum Umsortieren braucht es eine Zahl, die sich aendern -- laesst, ohne die ganze Kette neu zu haengen. ALTER TABLE "Character" ADD COLUMN IF NOT EXISTS "chainPosition" INTEGER NOT NULL DEFAULT 0; CREATE INDEX IF NOT EXISTS "Character_lineageId_chainPosition_idx" ON "Character"("lineageId", "chainPosition"); -- Bestand: die vorhandene Verkettung in Positionen uebersetzen. Der Anfang -- jeder Kette ist der CC ohne Vorgaenger, danach geht es Glied fuer Glied -- weiter - in Zehnerschritten, damit spaeter etwas dazwischen passt. WITH RECURSIVE kette AS ( SELECT "id", "lineageId", 0 AS pos FROM "Character" WHERE "predecessorId" IS NULL UNION ALL SELECT c."id", c."lineageId", k.pos + 10 FROM "Character" c JOIN kette k ON c."predecessorId" = k."id" ) UPDATE "Character" c SET "chainPosition" = kette.pos FROM kette WHERE c."id" = kette."id"; -- Profil-Adressen aus dem Forum. Sie werden uebernommen statt gebaut: die -- Profile liegen nicht unter dem Forums-Pfad, sondern eine Ebene darueber. ALTER TABLE "ForumThread" ADD COLUMN IF NOT EXISTS "authorProfileUrl" TEXT; ALTER TABLE "Player" ADD COLUMN IF NOT EXISTS "forumProfileUrl" TEXT;