PostgreSQL 类型
启用 postgres Cargo feature 后使用 SQLx 原生 PostgreSQL 连接池。derive 支持的常见模型类型
见模型;这不代表 SQLx 可编码的所有类型都能用于模型。
标量字段映射
| Rust 模型类型 | PostgreSQL 列类型 |
|---|---|
bool | BOOLEAN |
i16、i32、i64 | SMALLINT、INTEGER、BIGINT |
f32、f64 | REAL、DOUBLE PRECISION |
String | TEXT |
Vec<u8> | BYTEA |
serde_json::Value | JSONB |
uuid::Uuid(uuid) | UUID |
| chrono/time 日期时间类型 | DATE、TIME、TIMESTAMP 或 TIMESTAMPTZ |
rust_decimal::Decimal、bigdecimal::BigDecimal | NUMERIC |
IpAddr、IpNetwork、IpNet | INET |
MacAddress | MACADDR |
BitVec | BIT VARYING |
Rust Option<T> 对应可空列。日期时间、UUID、decimal、网络、MAC 和 bit-vector 类型需要启用
对应 Cargo feature。
sqlx::postgres::types::PgInterval 目前仅支持作为 PgArray 元素,不能独立作为派生模型字段。
其他 SQLx PostgreSQL 专有标量类型也不会自动成为 derive 可用类型。
数组
PostgreSQL 数组字段使用 PgArray<T>。支持的元素类型:
- 始终可用:
bool、i8、i16、i32、i64、f32、f64、String、serde_json::Value和PgInterval。 uuid:uuid::Uuid。chrono:NaiveDate、NaiveTime、NaiveDateTime、DateTime<Utc>和DateTime<FixedOffset>。time:Date、Time、PrimitiveDateTime、OffsetDateTime。rust_decimal/bigdecimal:对应 decimal 类型。ipnetwork:IpAddr、IpNetwork;ipnet:IpAddr、IpNet。mac_address:MacAddress;bit-vec:BitVec。
PgArray<Option<T>> 表示非空数组中的 NULL 元素;Option<PgArray<T>> 表示数组列本身可空;
空数组使用空的 PgArray 表示。数组通过文本形式编码,并绑定显式元素类型转换,仅用于上列内置
元素实现。单独实现 PgArrayElement 不会自动支持任意自定义 PostgreSQL 类型。
范围
使用 PgRange<T> 表示 PostgreSQL 范围:
| Rust 元素类型 | PostgreSQL 范围类型 |
|---|---|
i32 | INT4RANGE |
i64 | INT8RANGE |
chrono::NaiveDate 或 time::Date | DATERANGE |
chrono::NaiveDateTime 或 time::PrimitiveDateTime | TSRANGE |
chrono::DateTime<Utc> / DateTime<FixedOffset> 或 time::OffsetDateTime | TSTZRANGE |
rust_decimal::Decimal 或 bigdecimal::BigDecimal | NUMRANGE |
可通过 PgRange::from(1_i32..10) 转换 Rust 标准范围,也可用 PgRange::new(Bound, Bound)
指定端点是否包含及无界端点。Option<PgRange<T>> 表示 NULL 范围列。当前不支持自定义范围类型。
PostgreSQL 行为与限制
- 自增主键使用
BIGINT GENERATED BY DEFAULT AS IDENTITY。 - JSON 使用 JSONB,decimal 使用
NUMERIC。 - 网络、MAC 和 bit-vector 字段使用 PostgreSQL 原生类型;SQLite 不提供相同的操作符和语义。
- PostgreSQL 模型元数据为数组和范围提供显式列类型。
- schema 迁移生成器用于列删除/类型变更比较的解析器目前只识别
INTEGER、BIGINT、REAL、DOUBLE PRECISION、TEXT、BOOLEAN和JSONB。类型变更还要求约束未变化且没有 主键或唯一约束。生成语句会显式转换类型,应用前应检查数据及双向转换。 - derive 不支持 PostgreSQL 用户自定义 enum 和 composite 字段。