Drizzle
Connecting with Drizzle
Drizzle ORM is a TypeScript ORM for SQL databases designed with maximum type safety in mind. You can use their ORM to connect to your database.
If you plan on solely using Drizzle instead of the Supabase Data API (PostgREST), you can turn off the latter in the API Settings.
1
Install
Install Drizzle and related dependencies.
1npm i drizzle-orm postgres2npm i -D drizzle-kit2
Create your models
Create a schema.ts file and define your models.
1import { pgTable, serial, text, varchar } from "drizzle-orm/pg-core";23export const users = pgTable('users', {4 id: serial('id').primaryKey(),5 fullName: text('full_name'),6 phone: varchar('phone', { length: 256 }),7});3
Connect
Connect to your database using the Connection Pooler.
From the project Connect panel, copy the URI from the "Shared Pooler" option and save it as the DATABASE_URL environment variable. Remember to replace the password placeholder with your actual database password.
In local SUPABASE_DB_URL require to be adapted to work with Docker resolver
1import 'dotenv/config'23import { drizzle } from 'drizzle-orm/postgres-js'4import postgres from 'postgres'56let connectionString = process.env.DATABASE_URL7if (host.includes('postgres:postgres@supabase_db_')) {8 const url = URL.parse(host)!9 url.hostname = url.hostname.split('_')[1]10 connectionString = url.href11}1213// Disable prefetch as it is not supported for "Transaction" pool mode14export const client = postgres(connectionString, { prepare: false })15export const db = drizzle(client);