New in version 16.04.
Deepgreen DB includes a new set of arbitrary precision decimal
types that are more efficient than the native postgres Numeric
type. These are the Decimal64
and Decimal128
types that have 16-digit and 34-digit precisions respectively.
After installing the Deepgreen DB bin file, execute the following commands on your Deepgreen DB host to install the decimal64 and decimal128 types and functions into the database.
% source deepgreendb/greenplum_path.sh % cd $GPHOME/share/postgresql/contrib/ % psql your-database -f pg_decimal.sql
We can now do some exercise to demonstrate the performance
characteristics of these types. The session below shows that
the simple query select avg(x), sum(2*x) from table
over a million records takes:
% psql test test=# drop table if exists tt; DROP TABLE test=# create table tt( ii bigint, f64 double precision, d64 decimal64, d128 decimal128, n numeric(15, 3)) distributed randomly; CREATE TABLE test=# insert into tt select i, i + 0.123, (i + 0.123)::decimal64, (i + 0.123)::decimal128, i + 0.123 from generate_series(1, 1000000) i; INSERT 0 1000000 test=# \timing on Timing is on. test=# select count(*) from tt; count --------- 1000000 (1 row) Time: 16.929 ms test=# set vitesse.enable=1; SET Time: 1.888 ms test=# select avg(f64),sum(2*f64) from tt; avg | sum -----------------+------------------ 500000.62300062 | 1000001246001.24 (1 row) Time: 22.867 ms test=# select avg(d64),sum(2*d64) from tt; avg | sum ------------+------------------- 500000.623 | 1000001246000.000 (1 row) Time: 37.752 ms test=# select avg(d128),sum(2*d128) from tt; avg | sum ------------+------------------- 500000.623 | 1000001246000.000 (1 row) Time: 60.480 ms test=# set vitesse.enable=1; SET Time: 1.704 ms test=# select avg(n),sum(2*n) from tt; avg | sum ---------------------+------------------- 500000.623000000000 | 1000001246000.000 (1 row) Time: 86.086 ms test=# set vitesse.enable=0; SET Time: 1.633 ms test=# select avg(n),sum(2*n) from tt; avg | sum ---------------------+------------------- 500000.623000000000 | 1000001246000.000 (1 row) Time: 206.458 ms