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" });serialsmallserialbigserial
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 zone | 14: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
| 类型 | 实际类型 | 范围 |
|---|---|---|
| smallserial | smallint | -32,768 到 32,767 |
| serial | integer | -2,147,483,648 到 2,147,483,647 |
| bigserial | bigint | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
等于 mysql AUTO_INCREMENT、sqlite 的 INTEGER PRIMARY KEY AUTOINCREMENT