Compare commits

..

1 Commits

Author SHA1 Message Date
Jason Rasmussen
25c573bc7a chore: remove random code snippet (#25677) 2026-01-29 16:11:25 +00:00
2 changed files with 24 additions and 42 deletions

View File

@@ -59,8 +59,6 @@ export async function buildPostgresLaunchArguments(
): Promise<{
bin: string;
args: string[];
databaseName: string;
databaseUsername: string;
databasePassword: string;
databaseVersion: string;
databaseMajorVersion?: number;
@@ -75,8 +73,6 @@ export async function buildPostgresLaunchArguments(
const databaseMajorVersion = databaseSemver?.major;
const args: string[] = [];
let databaseUsername;
let databaseName;
if (isUrlConnection) {
if (bin !== 'pg_dump') {
@@ -89,23 +85,18 @@ export async function buildPostgresLaunchArguments(
// remove known bad parameters
parsedUrl.searchParams.delete('uselibpqcompat');
databaseUsername = parsedUrl.username;
databaseName = parsedUrl.pathname.replace(/^\//, '');
if (options.username) {
parsedUrl.username = options.username;
}
url = parsedUrl.toString();
} else {
// assume typical values if we can't parse URL
databaseUsername = 'postgres';
databaseName = 'immich';
}
args.push(url);
} else {
databaseUsername = databaseConfig.username;
databaseName = databaseConfig.database;
args.push(
'--username',
databaseConfig.username,
options.username ?? databaseConfig.username,
'--host',
databaseConfig.host,
'--port',
@@ -160,8 +151,6 @@ export async function buildPostgresLaunchArguments(
return {
bin: `/usr/lib/postgresql/${databaseMajorVersion}/bin/${bin}`,
args,
databaseUsername,
databaseName,
databasePassword: isUrlConnection ? new URL(databaseConfig.url).password : databaseConfig.password,
databaseVersion,
databaseMajorVersion,
@@ -218,53 +207,44 @@ const SQL_DROP_CONNECTIONS = `
AND pid <> pg_backend_pid();
`;
const SQL_RESET_SCHEMA = (username: string) => `
const SQL_RESET_SCHEMA = `
-- re-create the default schema
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
-- restore access to schema
GRANT ALL ON SCHEMA public TO "${username}";
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
`;
async function* sql(inputStream: Readable, databaseUsername: string, isPgClusterDump: boolean) {
async function* sql(inputStream: Readable, isPgClusterDump: boolean) {
yield SQL_DROP_CONNECTIONS;
yield isPgClusterDump
? // it is likely the dump contains SQL to try to drop the currently active
// database to ensure we have a fresh slate; if the `postgres` database exists
// then prefer to switch before continuing otherwise this will just silently fail
String.raw`
? String.raw`
\c postgres
`
: SQL_RESET_SCHEMA(databaseUsername);
: SQL_RESET_SCHEMA;
for await (const chunk of inputStream) {
yield chunk;
}
}
async function* sqlRollback(
inputStream: Readable,
databaseUsername: string,
databaseName: string,
isPgClusterDump: boolean,
) {
async function* sqlRollback(inputStream: Readable, isPgClusterDump: boolean) {
yield SQL_DROP_CONNECTIONS;
if (isPgClusterDump) {
yield String.raw`
-- try to re-create expected database
-- try to create database
-- may fail but script will continue running
CREATE DATABASE "${databaseName}";
CREATE DATABASE immich;
-- switch to database / newly created database
-- if it exists
\c "${databaseName}"
\c immich
`;
}
yield SQL_RESET_SCHEMA(databaseUsername);
yield SQL_RESET_SCHEMA;
for await (const chunk of inputStream) {
yield chunk;
@@ -293,10 +273,14 @@ export async function restoreDatabaseBackup(
isPgClusterDump = true;
}
const { bin, args, databaseUsername, databaseName, databasePassword, databaseMajorVersion } =
await buildPostgresLaunchArguments({ logger, database: databaseRepository, ...pgRepos }, 'psql', {
const { bin, args, databasePassword, databaseMajorVersion } = await buildPostgresLaunchArguments(
{ logger, database: databaseRepository, ...pgRepos },
'psql',
{
singleTransaction: !isPgClusterDump,
});
username: isPgClusterDump ? 'postgres' : undefined,
},
);
progressCb?.('backup', 0.05);
@@ -317,7 +301,7 @@ export async function restoreDatabaseBackup(
inputStream = storage.createPlainReadStream(backupFilePath);
}
const sqlStream = Readable.from(sql(inputStream, databaseUsername, isPgClusterDump));
const sqlStream = Readable.from(sql(inputStream, isPgClusterDump));
const psql = processRepository.spawnDuplexStream(bin, args, {
env: {
PATH: process.env.PATH,
@@ -348,7 +332,7 @@ export async function restoreDatabaseBackup(
fileStream.pipe(gunzip);
inputStream = gunzip;
const sqlStream = Readable.from(sqlRollback(inputStream, databaseUsername, databaseName, isPgClusterDump));
const sqlStream = Readable.from(sqlRollback(inputStream, isPgClusterDump));
const psql = processRepository.spawnDuplexStream(bin, args, {
env: {
PATH: process.env.PATH,

View File

@@ -22,5 +22,3 @@
return assetViewerManager.on(events);
});
</script>
const event = name.slice(2) as keyof Events;