PostgreSQL 数据类型
timestamptz vs timestamp
TLDR 您应该优先使用 timestamptz
而不是 timestamp
。这两种类型都不存储提供的时区,但 timestamptz
至少可以正确解析带有时区的日期。要保存用户时区,请为其创建一个单独的列。
让我们以以下表格为例
CREATE TABLE test (
t1 timestamptz,
t2 timestamp
);
timestamptz
和 timestamp
之间的第一个区别是 timestamp
会丢弃/忽略提供的时区
INSERT INTO test VALUES ('2021-01-01 02:00:00+02', '2021-01-01 02:00:00+02') RETURNING *;
t1 | t2
------------------------+---------------------
2021-01-01 00:00:00+00 | 2021-01-01 02:00:00
timestamp
还会忽略服务器/会话时区
SET timezone = 'America/Los_Angeles';
结果
SELECT * FROM test;
t1 | t2
------------------------+---------------------
2020-12-31 16:00:00-08 | 2021-01-01 02:00:00
JSONB
Bun 使用 JSONB
数据类型来存储映射和切片。要更改默认类型,请使用 type
结构体标签选项
type Model struct {
Data map[string]interface{} `bun:"type:jsonb"`
}
要启用 json.Decoder.UseNumber
选项
type Model struct {
Data map[string]interface{} `bun:",json_use_number"`
}
您也可以使用 json.RawMessage
来处理原始字节
type Model struct {
Data json.RawMessage `bun:"type:jsonb"`
}
数组
参见 使用 PostgreSQL 数组.
UUID
另请参阅
参见 不要这样做 获取更多提示。