Drizzle ORMにおけるPostgreSQLカラム型

PostgreSQLカラム型からDrizzle ORM pg-coreカラムビルダーへの完全マッピングガイド。serial、uuid、jsonb、タイムゾーン付きtimestampなどを含みます。

Column Types

詳細な説明

DrizzleにおけるPostgreSQL型マッピング

Drizzleのdrizzle-orm/pg-coreモジュールは、PostgreSQLのネイティブ型を忠実に反映するカラムビルダーを提供します。これにより、使用するデータベース型を正確に制御できます。

一般的な型マッピング

PostgreSQL型 Drizzleビルダー
SERIAL serial() serial("id")
BIGSERIAL bigserial() bigserial("id", { mode: "number" })
INTEGER integer() integer("count")
SMALLINT smallint() smallint("age")
BIGINT bigint() bigint("total", { mode: "number" })
VARCHAR(n) varchar() varchar("name", { length: 255 })
TEXT text() text("bio")
BOOLEAN boolean() boolean("active")
TIMESTAMP timestamp() timestamp("created_at")
TIMESTAMPTZ timestamp() timestamp("created_at", { withTimezone: true })
DATE date() date("birth_date")
UUID uuid() uuid("id")
JSON json() json("data")
JSONB jsonb() jsonb("metadata")
NUMERIC(p,s) numeric() numeric("price", { precision: 10, scale: 2 })
REAL real() real("score")
DOUBLE PRECISION doublePrecision() doublePrecision("lat")

変換例

CREATE TABLE products (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  name VARCHAR(200) NOT NULL,
  price NUMERIC(10, 2) NOT NULL,
  metadata JSONB,
  created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);

生成結果:

import { jsonb, numeric, pgTable, timestamp, uuid, varchar } from "drizzle-orm/pg-core";
import { sql } from "drizzle-orm";

export const products = pgTable("products", {
  id: uuid("id").default(sql`gen_random_uuid()`).primaryKey(),
  name: varchar("name", { length: 200 }).notNull(),
  price: numeric("price", { precision: 10, scale: 2 }).notNull(),
  metadata: jsonb("metadata"),
  createdAt: timestamp("created_at", { withTimezone: true }).default(sql`CURRENT_TIMESTAMP`),
});

PostgreSQL固有のビルダー

一部のビルダーはpg-coreモジュール専用です:uuid()jsonb()doublePrecision()smallint()serial()bigserial()。これらはMySQLやSQLiteモジュールに直接対応するものがなく、ダイアレクトを切り替えると代替型にマッピングされます。

ユースケース

Drizzle ORMを使用してPostgreSQLバックエンドのアプリケーションを構築しており、既存のPostgreSQLカラム型に対応するpg-coreカラムビルダーを理解する必要がある場合。

試してみる — SQL to Drizzle Schema

フルツールを開く