Migrationen erzeugen, ohne die Suche kaputtzumachen
"prisma migrate diff" kennt die Trigramm-Indizes aus prisma/sql/volltextsuche.sql nicht und schreibt deshalb in jede Migration ein DROP INDEX dafuer. Fuenfmal mussten die Zeilen von Hand raus. Auf dem Server waere es folgenlos geblieben - update.sh legt die Indizes hinterher neu an -, in der Entwicklung dagegen waere die Suche still langsam geworden. npm run db:migration -- <name> [--anwenden] npm run db:pruefen Aufbau: - Die Liste der geschuetzten Indizes steht an einer Stelle. Wer in prisma/sql/ einen hinzufuegt, traegt ihn dort ein. - dropZeilenEntfernen() ist bewusst eng: Nur eine DROP-Anweisung, die einen geschuetzten Index nennt, faellt weg. Ein DROP INDEX auf einen Prisma-eigenen Index bleibt stehen - der soll ja weg. Ein Kommentar, der den Namen bloss erwaehnt, ebenfalls. - Der Kopf der erzeugten Datei sagt, was entfernt wurde und warum. - Nach --anwenden wird gegen die Datenbank geprueft, ob die Indizes wirklich noch stehen. Das ist der Unterschied zwischen "sollte gutgegangen sein" und "nachgesehen". Beim Probelauf gefunden und behoben: Stimmen Schema und Datenbank ueberein, besteht der ganze Diff aus den beiden bekannten DROP-Zeilen. Das Skript legte dafuer eine leere Migration an - und eine leere Migration in der Historie ist schlimmer als keine, weil sie als angewendet gilt und niemand mehr weiss, wofuer sie gut war. Jetzt bricht es vorher ab, ohne einen Ordner zu hinterlassen. Die Typen liegen als .d.mts daneben: Das Skript bleibt .mjs und laeuft ohne Bauschritt, die Tests laufen trotzdem nicht gegen "any". Geprueft: zwoelf Einheitstests, dazu von Hand der Lauf mit echter Schemaaenderung und der Lauf ohne. Refs #24
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Typen fuer das Werkzeugskript.
|
||||
*
|
||||
* Das Skript selbst bleibt .mjs - es laeuft ohne Bauschritt, auch auf
|
||||
* einem Rechner, auf dem nur Node steht. Die Typen daneben sorgen dafuer,
|
||||
* dass die Tests trotzdem geprueft werden und nicht stillschweigend
|
||||
* gegen "any" laufen.
|
||||
*/
|
||||
|
||||
export type GeschuetzterIndex = {
|
||||
name: string
|
||||
quelle: string
|
||||
}
|
||||
|
||||
export declare const GESCHUETZTE_INDIZES: GeschuetzterIndex[]
|
||||
|
||||
export declare function dropZeilenEntfernen(
|
||||
sql: string,
|
||||
geschuetzt?: GeschuetzterIndex[],
|
||||
): { sql: string; entfernt: string[] }
|
||||
|
||||
export declare function hatAnweisungen(sql: string): boolean
|
||||
|
||||
export declare function kopfBauen(
|
||||
name: string,
|
||||
entfernt: string[],
|
||||
geschuetzt?: GeschuetzterIndex[],
|
||||
): string
|
||||
|
||||
export declare function ordnernameBauen(name: string, jetzt?: Date): string
|
||||
|
||||
export declare function indizesPruefen(): void
|
||||
Reference in New Issue
Block a user