pg_bigdecimal

Crates.iopg_bigdecimal
lib.rspg_bigdecimal
version0.1.5
sourcesrc
created_at2021-08-31 11:21:21.608984
updated_at2022-09-07 10:42:38.362708
descriptionPostgres' numeric <=> Rust's BigDecimal
homepage
repositoryhttps://github.com/tzConnectBerlin/rust-pg_bigdecimal
max_upload_size
id445062
size16,518
Rick Klomp (RKlompUU)

documentation

README

rust-pg_bigdecimal

A Rust datatype implementation for the Postgres Numeric type (ie the types listed in https://www.postgresql.org/docs/13/datatype-numeric.html under "decimal"/"numeric"), to be used with Rust's "Postgres" library. The full spectrum of Postgres' Numeric value range is supported.

This small Rust package has been created because currently the main "Postgres" library (https://docs.rs/postgres/0.19.1/postgres/index.html) does not provide a native datatype to read/write Numeric values.

We only implement the wire logic of Postgres' Numeric datatype. We didn't rewrite the whole logic of big number manipulation, rather we let that logic be implemented by the already popular BigDecimal package (https://docs.rs/bigdecimal/0.3.0/bigdecimal/).

Specifically, our new Rust datatype PgNumeric is simply an Optional BigDecimal. With None representing the Postgres Numeric value NaN, and all Some(..) representing Postgres Numeric numbers.

Listed on crates.io here: https://crates.io/crates/pg_bigdecimal.

Comparisons between similar packages

  • https://crates.io/crates/rust-decimal provides a rust native type, however it's represented as a 96 bit integer number + scaling bits + 1 sign bit. This means that "only" (quoting only here because it is still a large integer space) a small part of Postgres' Numeric values can be translated. In our case it was not sufficient.
Commit count: 25

cargo fmt