mirror of
https://github.com/umami-software/umami.git
synced 2025-12-06 01:18:00 +01:00
Fixed replica logic.
This commit is contained in:
parent
33cb195fd0
commit
c427c6f547
1 changed files with 33 additions and 27 deletions
|
|
@ -206,6 +206,10 @@ async function rawQuery(sql: string, data: Record<string, any>, name?: string):
|
|||
return `$${params.length}${type ?? ''}`;
|
||||
});
|
||||
|
||||
if (process.env.DATABASE_REPLICA_URL && '$replica' in client) {
|
||||
return client.$replica().$queryRawUnsafe(query, ...params);
|
||||
}
|
||||
|
||||
return client.$queryRawUnsafe(query, ...params);
|
||||
}
|
||||
|
||||
|
|
@ -296,10 +300,6 @@ function getSchema() {
|
|||
}
|
||||
|
||||
function getClient() {
|
||||
if (!process.env.DATABASE_URL) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const url = process.env.DATABASE_URL;
|
||||
const replicaUrl = process.env.DATABASE_REPLICA_URL;
|
||||
const logQuery = process.env.LOG_QUERY;
|
||||
|
|
@ -307,43 +307,49 @@ function getClient() {
|
|||
const connectionUrl = new URL(url);
|
||||
const schema = connectionUrl.searchParams.get('schema') ?? undefined;
|
||||
|
||||
const adapter = new PrismaPg({ connectionString: url.toString() }, { schema });
|
||||
const baseAdapter = new PrismaPg({ connectionString: url }, { schema });
|
||||
|
||||
const prisma = new PrismaClient({
|
||||
adapter,
|
||||
const baseClient = new PrismaClient({
|
||||
adapter: baseAdapter,
|
||||
errorFormat: 'pretty',
|
||||
...(logQuery ? PRISMA_LOG_OPTIONS : {}),
|
||||
});
|
||||
|
||||
if (replicaUrl) {
|
||||
const replicaAdapter = new PrismaPg({ connectionString: replicaUrl.toString() }, { schema });
|
||||
|
||||
const replicaClient = new PrismaClient({
|
||||
adapter: replicaAdapter,
|
||||
...(logQuery ? PRISMA_LOG_OPTIONS : {}),
|
||||
});
|
||||
|
||||
prisma.$extends(
|
||||
readReplicas({
|
||||
replicas: [replicaClient],
|
||||
}),
|
||||
);
|
||||
if (logQuery) {
|
||||
baseClient.$on('query', log);
|
||||
}
|
||||
|
||||
if (!replicaUrl) {
|
||||
log('Prisma initialized');
|
||||
globalThis[PRISMA] ??= baseClient;
|
||||
return baseClient;
|
||||
}
|
||||
|
||||
const replicaAdapter = new PrismaPg({ connectionString: replicaUrl }, { schema });
|
||||
|
||||
const replicaClient = new PrismaClient({
|
||||
adapter: replicaAdapter,
|
||||
errorFormat: 'pretty',
|
||||
...(logQuery ? PRISMA_LOG_OPTIONS : {}),
|
||||
});
|
||||
|
||||
if (logQuery) {
|
||||
prisma.$on('query' as never, log);
|
||||
replicaClient.$on('query', log);
|
||||
}
|
||||
|
||||
log('Prisma initialized');
|
||||
const extended = baseClient.$extends(
|
||||
readReplicas({
|
||||
replicas: [replicaClient],
|
||||
}),
|
||||
);
|
||||
|
||||
if (!globalThis[PRISMA]) {
|
||||
globalThis[PRISMA] = prisma;
|
||||
}
|
||||
log('Prisma initialized (with replica)');
|
||||
globalThis[PRISMA] ??= extended;
|
||||
|
||||
return prisma;
|
||||
return extended;
|
||||
}
|
||||
|
||||
const client: PrismaClient = globalThis[PRISMA] || getClient();
|
||||
const client = (globalThis[PRISMA] || getClient()) as ReturnType<typeof getClient>;
|
||||
|
||||
export default {
|
||||
client,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue