extension-read-replicas icon indicating copy to clipboard operation
extension-read-replicas copied to clipboard

Read replica doesn't seem to work with PrismaNeon adapter

Open romantseg opened this issue 5 months ago • 0 comments

I want to incorporate using read replicas with PrismaNeon adapter. Here is the code I have

import "server-only";

import { env } from "@/env";
import { Pool } from "@neondatabase/serverless";
import { PrismaNeon } from "@prisma/adapter-neon";
import { PrismaClient } from "@prisma/client";
import { readReplicas } from "@prisma/extension-read-replicas";

const pool = new Pool({
  connectionString: env.DATABASE_URL ?? process.env.DATABASE_URL,
});

const adapter = new PrismaNeon(pool);

const createPrismaClient = () => {
  if (process.env.NODE_ENV === "development") {
    return new PrismaClient();
  }
  if (env.DATABASE_URL_READ_REPLICA) {
    console.log("prisma client with read replica");
    return new PrismaClient({
      adapter,
    }).$extends(
      readReplicas({
        url: env.DATABASE_URL_READ_REPLICA,
      }),
    );
  }
  return new PrismaClient({
    adapter,
  });
};

const globalForPrisma = globalThis as unknown as {
  prisma: ReturnType<typeof createPrismaClient> | undefined;
};

export const db = globalForPrisma.prisma ?? createPrismaClient();

if (env.NODE_ENV !== "production") {
  globalForPrisma.prisma = db;
}

however, this doesn't seem to work (in practice read replica is never activated), most likely because of using PrismaNeon. Is this a bug or is it intentional? If so, the docs should probably be a bit more explicit about this. And how would one handle this case

romantseg avatar Sep 17 '24 08:09 romantseg