#postgresql #numeric #decimal-number #big-decimal #pg

pg_bigdecimal

Postgres 的数值 <=> Rust 的 BigDecimal

6 个版本

0.1.5 2022 年 9 月 7 日
0.1.4 2021 年 9 月 30 日
0.1.1 2021 年 8 月 31 日

#949数据库接口

Download history 598/week @ 2024-03-14 684/week @ 2024-03-21 920/week @ 2024-03-28 513/week @ 2024-04-04 742/week @ 2024-04-11 635/week @ 2024-04-18 568/week @ 2024-04-25 710/week @ 2024-05-02 1159/week @ 2024-05-09 956/week @ 2024-05-16 442/week @ 2024-05-23 1399/week @ 2024-05-30 2192/week @ 2024-06-06 1633/week @ 2024-06-13 1484/week @ 2024-06-20 1312/week @ 2024-06-27

6,791 每月下载量
2 crates 中使用

MIT 许可证

17KB
365 行代码

rust-pg_bigdecimal

Postgres 数值类型(即 "decimal"/"numeric" 下的类型)的 Rust 数据类型实现,用于与 Rust 的 "Postgres" 库一起使用。支持 Postgres 数值类型的完整范围。

创建这个小 Rust 包是因为目前主要的 "Postgres" 库(https://docs.rs/postgres/0.19.1/postgres/index.html)没有提供原生的数据类型来读取/写入数值。

我们只实现了 Postgres 数值数据类型的网络逻辑。我们没有重写整个大数操作的逻辑,而是让这个逻辑由已经流行的 BigDecimal 包(https://docs.rs/bigdecimal/0.3.0/bigdecimal/)实现。

具体来说,我们新的 Rust 数据类型 PgNumeric 简单地是一个可选的 BigDecimal。其中 None 表示 Postgres 数值值 NaN,而所有 Some(..) 表示 Postgres 数值数字。

在 crates.io 上列出:https://crates.io/crates/pg_bigdecimal

类似包的比较

  • https://crates.io/crates/rust-decimal 提供了一个 Rust 原生类型,但它表示为 96 位整数数字 + 缩放位 + 1 个符号位。这意味着“仅”(这里引用“仅”是因为它仍然是一个很大的整数空间)Postgres 数值值的一小部分可以被转换。在我们的情况下,这还不够。

依赖关系

~8–18MB
~258K SLoC