Phase 11: Freigabereife (#16)
This commit was merged in pull request #16.
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Die Verbindungsangaben für `pg_dump` und `pg_restore`.
|
||||
*
|
||||
* Eigene Datei, weil beide Skripte sie brauchen — und weil ein falsch
|
||||
* zerlegter Zugang der unangenehmste Fehler in einem Sicherungsskript wäre:
|
||||
* es liefe durch, schriebe eine Datei, und die enthielte die falsche
|
||||
* Datenbank. Auffallen würde es beim Zurückspielen, also genau dann, wenn man
|
||||
* die Sicherung braucht.
|
||||
*/
|
||||
|
||||
export interface Zugang {
|
||||
benutzer: string;
|
||||
passwort: string;
|
||||
datenbank: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Zerlegt eine Verbindungszeichenkette in ihre Teile.
|
||||
*
|
||||
* Die URL lässt sich nicht als Ganzes an `pg_dump` durchreichen: Prisma hängt
|
||||
* eigene Parameter an (`?schema=public`), die es mit "invalid URI query
|
||||
* parameter" ablehnt. Und der Port darin gilt vom Rechner aus — im Container,
|
||||
* wo die Werkzeuge laufen, liegt Postgres auf 5432.
|
||||
*/
|
||||
export function zugangAus(roh: string | undefined): Zugang {
|
||||
if (!roh) {
|
||||
throw new Error("DIRECT_DATABASE_URL fehlt.");
|
||||
}
|
||||
|
||||
let url: URL;
|
||||
try {
|
||||
url = new URL(roh);
|
||||
} catch {
|
||||
throw new Error(`Die Verbindungszeichenkette ist keine gültige URL: ${roh}`);
|
||||
}
|
||||
|
||||
if (!url.protocol.startsWith("postgres")) {
|
||||
throw new Error(`Erwartet wird eine postgresql://-Adresse, bekommen: ${url.protocol}//`);
|
||||
}
|
||||
|
||||
const datenbank = url.pathname.replace(/^\//, "");
|
||||
if (!datenbank) {
|
||||
throw new Error("In der Verbindungszeichenkette fehlt der Datenbankname.");
|
||||
}
|
||||
|
||||
return {
|
||||
benutzer: decodeURIComponent(url.username),
|
||||
passwort: decodeURIComponent(url.password),
|
||||
datenbank,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user