Skip to content

pg 类型

boolean

语法转换

ts
'10'::int      -- 把字符串 '10' 转成整数
now()::date    -- 把当前时间转成日期类型

CAST('10' AS int)
CAST(now() AS date)

数字

整数

ts
import { integer, smallint, bigint } from "drizzle-orm/pg-core";

integer、int、int4

smallint、int2 :2 字节(16 位)很小

bigint、int8

ts
export const table = pgTable("table", {
  bigint: bigint({ mode: "number" }),
});

// 将推导为 `number`
bigint: bigint({ mode: "number" });

// 将推导为 `bigint`
bigint: bigint({ mode: "bigint" });

serial
smallserial
bigserial

ts
export const table = pgTable("table", {
  id: serial(),
});

浮点数

numeric decimal

real float4 单精度

doublePrecision float8 双精度

ts
export const table = pgTable("table", {
  // 表示最多 10 位数字,其中 2 位小数
  // -99999999.99 至 99999999.99
  numeric1: numeric({ precision: 10, scale: 2 }),
  real2: real().default(10.1),
  double3: doublePrecision().default(sql`'10.10'::double precision`),
});

文本

text 无限制

varchar

char

ts
export const table = pgTable("table", {
  text: text({ enum: ["name", "age"] }), // 将类型推到尾 name | age
  varchar1: varchar(),
  varchar2: varchar({ length: 256 }),
  char1: char(),
  char2: char({ length: 256 }),
});

时间

time 不带时区的时间
timetz 带时区的时间
timestamp 不带时区的时间戳
timestamptz 带时区的时间戳

time 是 时分秒

date 是 年月日

timestamp 支持 年月日时分秒

类型说明
time without time zone纯粹的 14:00:00
time with time zone14:00:00+08,带有 +08 时区
ts
const table = pgTable("table", {
  time1: time(),
  time2: time({ withTimezone: true }),
  // 精度,表示最多保留 6 位小数秒,即微秒精度(百万分之一秒)
  // 如:14:30:00.123456
  time3: time({ precision: 6 }),

  // 将推导为 date
  timestamp: timestamp({ mode: "date" }),
  // 将推导为 string
  timestamp: timestamp({ mode: "string" }),
});

JSON

jsonb 是二进制,虽然存储满,但是查询快,并且可以创建索引。

ts
const table = pgTable("table", {
  json1: json(),
  json2: json().$type<string[]>().default({}),

  jsonb1: jsonb(),
});

枚举

ts
export const moodEnum = pgEnum("mood", ["sad", "ok", "happy"]);
export const table = pgTable("table", {
  mood: moodEnum(),
});

其他

点,xy , todo

线,line,todo


serial

类型实际类型范围
smallserialsmallint-32,768 到 32,767
serialinteger-2,147,483,648 到 2,147,483,647
bigserialbigint-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

等于 mysql AUTO_INCREMENT、sqlite 的 INTEGER PRIMARY KEY AUTOINCREMENT