pglite-prisma-adapter
v0.3.0
Published
Prisma's driver adapter for "@electric-sql/pglite"
Downloads
6,911
Maintainers
Readme
pglite-adapter-prisma
Prisma driver adapter for Pglite Driver.
Before you start
Before you start, make sure you have:
- Node >= 18
- Prisma CLI installed
Install
You will need to install the pglite-prisma-adapter
driver adapter and the @electric-sql/pglite
serverless driver.
npm install pglite-prisma-adapter @electric-sql/pglite
DATABASE URL
Set the environment to your .env file in the local environment.
// .env
DATABASE_URL="./some/path"
NOTE
The adapter only supports Prisma Client. Prisma migration and introspection are not supported, though I want to make a cli tool to help with that in the future.
Define Prisma schema
First, you need to create a Prisma schema file called schema.prisma and define the model. Here we use the user as an example.
// schema.prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}
datasource db {
provider = "postgres"
url = env("DATABASE_URL")
}
// define model according to your database table
model user {
id Int @id @default(autoincrement())
email String? @unique(map: "uniq_email") @db.VarChar(255)
name String? @db.VarChar(255)
}
Query
Here is an example of query:
// query.js
import { PGlite } from '@electric-sql/pglite';
import { PrismaPGlite } from 'pglite-prisma-adapter';
import { PrismaClient } from '@prisma/client';
import dotenv from 'dotenv';
// setup
dotenv.config();
const connectionString = `${process.env.DATABASE_URL}`;
// init prisma client
const client = new PGlite(connectionString);
const adapter = new PrismaPGlite(client);
const prisma = new PrismaClient({ adapter });
// insert
const user = await prisma.user.create({
data: {
email: '[email protected]',
name: 'test',
},
})
console.log(user)
// query after insert
console.log(await prisma.user.findMany())
Transaction
Here is an example of transaction:
// query.js
import { PGlite } from '@electric-sql/pglite';
import { PrismaPGlite } from 'pglite-prisma-adapter';
import { PrismaClient } from '@prisma/client';
import dotenv from 'dotenv';
// setup
dotenv.config();
const connectionString = `${process.env.DATABASE_URL}`;
// init prisma client
const client = new PGlite(connectionString);
const adapter = new PrismaPGlite(client);
const prisma = new PrismaClient({ adapter });
const createUser1 = prisma.user.create({
data: {
email: '[email protected]',
name: 'Shi Yuhang',
},
})
const createUser2 = prisma.user.create({
data: {
email: '[email protected]',
name: 'Shi Yuhang2',
},
})
const createUser3 = prisma.user.create({
data: {
email: '[email protected]',
name: 'Shi Yuhang2',
},
})
try {
await prisma.$transaction([createUser1, createUser2]) // Operations fail together
} catch (e) {
console.log(e)
await prisma.$transaction([createUser1, createUser3]) // Operations succeed together
}
Credits
Based on other projects: