Skip to content

Read replica doesn't seem to work with PrismaNeon adapter #39

@romantseg

Description

@romantseg

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions