Prisma 8 extension
PostGIS
Geometry columns and geospatial queries such as distance and containment.
By PrismaPostgreSQL
What it does
Stores points, lines, and polygons as a typed Geometry column with optional SRID, reads and writes them as GeoJSON-shaped values, and adds seven query operations: distance, distanceSphere, dwithin, contains, within, intersects, and intersectsBbox. Declares PostGIS as a database dependency so db init enables it.
Register it in the config
prisma.config.ts
import { definePrismaConfig } from 'prisma/config';
import postgis from '@prisma/orm-extension-postgis/control';
import { defineConfig as ormConfig } from '@prisma/orm-postgres/config';
export default definePrismaConfig({
orm: ormConfig({
contract: './src/prisma/contract.prisma',
extensions: [postgis],
db: {
connection: process.env['DATABASE_URL']!,
},
}),
});Register it on the client
src/prisma/db.ts
import postgis from '@prisma/orm-extension-postgis/runtime';
import postgres from '@prisma/orm-postgres/runtime';
import type { Contract } from './contract.d';
import contractJson from './contract.json' with { type: 'json' };
export const db = postgres<Contract>({
contractJson,
url: process.env['DATABASE_URL']!,
extensions: [postgis],
});Declare a geometry column
src/prisma/contract.prisma
types {
Point4326 = postgis.Geometry(4326)
}
model Place {
id String @id @default(uuid())
name String
location Point4326
}Then run npx prisma@latest db init, or db update on an existing database. The extension ships its own migration for anything the database needs installed. Full walkthrough in the extensions docs.
