drizzle-partition
v0.1.0
Published
Turn a drizzle-kit generated CREATE TABLE statement into a partitioned Postgres table, and generate the child partitions.
Downloads
183
Maintainers
Readme
drizzle-partition
npx drizzle-partition drizzle/0000_init.sql --table orders --strategy RANGE --column created_at \
--partition "orders_2024:FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')" \
--partition "orders_default:DEFAULT"Turns a plain CREATE TABLE statement generated by drizzle-kit generate into a partitioned Postgres table, and appends the CREATE TABLE ... PARTITION OF ... statements for the child partitions. Answers drizzle-orm#2854, where people have been asking for partition support in the schema.
Why a SQL rewrite instead of a schema helper
Drizzle already turns your pgTable schema into correct CREATE TABLE SQL through drizzle-kit generate. The missing piece is only the PARTITION BY clause and the child tables, which is a small, mechanical addition to that generated SQL. Rewriting the SQL keeps this tool independent of Drizzle's internal column-builder API, so it works with any Drizzle version and does not need to reimplement its type mapping.
What it does
- You write your table with
pgTableas usual and rundrizzle-kit generate. - You run
drizzle-partitionon the generated migration file, naming the table, the partition strategy (RANGE,LIST, orHASH), the partition key column, and one--partition "name:VALUES clause"per child table. - It finds that table's
CREATE TABLEstatement (matching parentheses correctly, so a type likenumeric(10, 2)is not mistaken for the end of the column list), addsPARTITION BY <STRATEGY> (<column>), and appends oneCREATE TABLE "<name>" PARTITION OF "<table>" <clause>;per partition.
Library usage
import { partitionTable } from "drizzle-partition";
const sql = partitionTable(generatedSql, {
table: "orders",
strategy: "RANGE",
column: "created_at",
partitions: [{ name: "orders_2024", values: "FOR VALUES FROM ('2024-01-01') TO ('2025-01-01')" }, { name: "orders_default", values: "DEFAULT" }],
});What it does not do
No sub-partitioning, no automatic conversion of an existing non-partitioned table, no attempt to compute partition boundaries for you. Postgres also requires the partition key to be part of any primary key or unique constraint on a partitioned table; this tool does not check or fix that for you, it only rewrites the DDL you already generated.
Install
npm install --save-dev drizzle-partitionZero runtime dependencies. Requires Node 18 or later.
