pg_math -- compute statistical distribution functions in PostgreSQL

October 16, 2025 ยท View on GitHub

pg_math is a C extension that utilises the GSL (GNU Scientific Library) to support Postgresql for various types of statistical distribution functions.

Available Distributions

  1. F-Distribution
  2. Gaussian Distribution
  3. Unit Gaussian Distribution
  4. Gaussian Tail Distribution
  5. Bivariate Gaussian Distribution
  6. Exponential Distribution
  7. Laplace Distribution
  8. Exponential Power Distribution
  9. Cauchy Distribution
  10. Rayleigh Distribution
  11. Rayleigh Tail Distribution
  12. Landau Distribution
  13. Gamma Distribution
  14. Flat (Uniform) Distribution
  15. Lognormal Distribution
  16. Chi-squared Distribution
  17. T-Distribution
  18. Beta Distribution
  19. Logistic Distribution
  20. Pareto Distribution
  21. Weibull Distribution
  22. Type-1 Gumbel Distribution
  23. Type-2 Gumbel Distribution
  24. Poisson Distribution
  25. Bernoulli Distribution
  26. Binomial Distribution
  27. Negative Binomial Distribution
  28. Pascal Distribution
  29. Geometric Distribution
  30. Hypergeometric Distribution
  31. Logarithmic Distribution

List of Functions

Note

Functions with prefix "cdf" computes cumulative distribution value

Functions with prefix "rdf" computes random distribution value

Distribution TypeFunction NameReturn Type
F-Distributionrdf_fdist(double precision,double precision,double precision)double precision
F-Distributioncdf_fdist_p(double precision,double precision,double precision)double precision
F-Distributioncdf_fdist_q(double precision,double precision,double precision)double precision
F-Distributioncdf_fdist_pinv(double precision,double precision,double precision)double precision
F-Distributioncdf_fdist_qinv(double precision,double precision,double precision)double precision
Gaussian Distributionrdf_gaussian(double precision,double precision)double precision
Gaussian Distributioncdf_gaussian_p(double precision,double precision)double precision
Gaussian Distributioncdf_gaussian_q(double precision,double precision)double precision
Gaussian Distributioncdf_gaussian_pinv(double precision,double precision)double precision
Gaussian Distributioncdf_gaussian_qinv(double precision,double precision)double precision
Unit Gaussian Distributionrdf_unit_gaussian(double precision)double precision
Unit Gaussian Distributioncdf_unit_gaussian_p(double precision)double precision
Unit Gaussian Distributioncdf_unit_gaussian_q(double precision)double precision
Unit Gaussian Distributioncdf_unit_gaussian_pinv(double precision)double precision
Unit Gaussian Distributioncdf_unit_gaussian_qinv(double precision)double precision
Gaussian Tail Distributionrdf_gaussian_tail(double precision,double precision,double precision)double precision
Unit Gaussian Tail Distributionrdf_unit_gaussian_tail(double precision,double precision)double precision
Bivariate Gaussian Distributionrdf_bivariate_gaussian(double precision,double precision,double precision,double precision,double precision)double precision
Exponential Distributionrdf_exponential(double precision,double precision)double precision
Exponential Distributioncdf_exponential_p(double precision,double precision)double precision
Exponential Distributioncdf_exponential_q(double precision,double precision)double precision
Exponential Distributioncdf_exponential_pinv(double precision,double precision)double precision
Exponential Distributioncdf_exponential_qinv(double precision,double precision)double precision
Laplace Distributionrdf_laplace(double precision,double precision)double precision
Laplace Distributioncdf_laplace_p(double precision,double precision)double precision
Laplace Distributioncdf_laplace_q(double precision,double precision)double precision
Laplace Distributioncdf_laplace_pinv(double precision,double precision)double precision
Laplace Distributioncdf_laplace_qinv(double precision,double precision)double precision
Exponential Power Distributionrdf_exppow(double precision,double precision,double precision)double precision
Exponential Power Distributioncdf_exppow_p(double precision,double precision,double precision)double precision
Exponential Power Distributioncdf_exppow_q(double precision,double precision,double precision)double precision
Cauchy Distributionrdf_cauchy(double precision,double precision)double precision
Cauchy Distributioncdf_cauchy_p(double precision,double precision)double precision
Cauchy Distributioncdf_cauchy_q(double precision,double precision)double precision
Cauchy Distributioncdf_cauchy_pinv(double precision,double precision)double precision
Cauchy Distributioncdf_cauchy_qinv(double precision,double precision)double precision
Rayleigh Distributionrdf_rayleigh(double precision,double precision)double precision
Rayleigh Distributioncdf_rayleigh_p(double precision,double precision)double precision
Rayleigh Distributioncdf_rayleigh_q(double precision,double precision)double precision
Rayleigh Distributioncdf_rayleigh_pinv(double precision,double precision)double precision
Rayleigh Distributioncdf_rayleigh_qinv(double precision,double precision)double precision
Rayleigh Tail Distributionrdf_rayleigh_tail(double precision,double precision,double precision)double precision
Landau Distributionrdf_landau(double precision)double precision
Gamma Distributionrdf_gamma(double precision,double precision,double precision)double precision
Gamma Distributioncdf_gamma_p(double precision,double precision,double precision)double precision
Gamma Distributioncdf_gamma_q(double precision,double precision,double precision)double precision
Gamma Distributioncdf_gamma_pinv(double precision,double precision,double precision)double precision
Gamma Distributioncdf_gamma_qinv(double precision,double precision,double precision)double precision
Flat (Uniform) Distributionrdf_flat_unif(double precision,double precision,double precision)double precision
Flat (Uniform) Distributioncdf_flat_unif_p(double precision,double precision,double precision)double precision
Flat (Uniform) Distributioncdf_flat_unif_q(double precision,double precision,double precision)double precision
Flat (Uniform) Distributioncdf_flat_unif_pinv(double precision,double precision,double precision)double precision
Flat (Uniform) Distributioncdf_flat_unif_qinv(double precision,double precision,double precision)double precision
Lognormal Distributionrdf_lognormal(double precision,double precision,double precision)double precision
Lognormal Distributioncdf_lognormal_p(double precision,double precision,double precision)double precision
Lognormal Distributioncdf_lognormal_q(double precision,double precision,double precision)double precision
Lognormal Distributioncdf_lognormal_pinv(double precision,double precision,double precision)double precision
Lognormal Distributioncdf_lognormal_qinv(double precision,double precision,double precision)double precision
Chi-squared Distributionrdf_chisq(double precision,double precision)double precision
Chi-squared Distributioncdf_chisq_p(double precision,double precision)double precision
Chi-squared Distributioncdf_chisq_q(double precision,double precision)double precision
Chi-squared Distributioncdf_chisq_pinv(double precision,double precision)double precision
Chi-squared Distributioncdf_chisq_qinv(double precision,double precision)double precision
T-Distributionrdf_tdist(double precision,double precision)double precision
T-Distributioncdf_tdist_p(double precision,double precision)double precision
T-Distributioncdf_tdist_q(double precision,double precision)double precision
T-Distributioncdf_tdist_pinv(double precision,double precision)double precision
T-Distributioncdf_tdist_qinv(double precision,double precision)double precision
Beta Distributionrdf_beta(double precision,double precision,double precision)double precision
Beta Distributioncdf_beta_p(double precision,double precision,double precision)double precision
Beta Distributioncdf_beta_q(double precision,double precision,double precision)double precision
Beta Distributioncdf_beta_pinv(double precision,double precision,double precision)double precision
Beta Distributioncdf_beta_qinv(double precision,double precision,double precision)double precision
Logistic Distributionrdf_logistic(double precision,double precision)double precision
Logistic Distributioncdf_logistic_p(double precision,double precision)double precision
Logistic Distributioncdf_logistic_q(double precision,double precision)double precision
Logistic Distributioncdf_logistic_pinv(double precision,double precision)double precision
Logistic Distributioncdf_logistic_qinv(double precision,double precision)double precision
Pareto Distributionrdf_pareto(double precision,double precision,double precision)double precision
Pareto Distributioncdf_pareto_p(double precision,double precision,double precision)double precision
Pareto Distributioncdf_pareto_q(double precision,double precision,double precision)double precision
Pareto Distributioncdf_pareto_pinv(double precision,double precision,double precision)double precision
Pareto Distributioncdf_pareto_qinv(double precision,double precision,double precision)double precision
Weibull Distributionrdf_weibull(double precision,double precision,double precision)double precision
Weibull Distributioncdf_weibull_p(double precision,double precision,double precision)double precision
Weibull Distributioncdf_weibull_q(double precision,double precision,double precision)double precision
Weibull Distributioncdf_weibull_pinv(double precision,double precision,double precision)double precision
Weibull Distributioncdf_weibull_qinv(double precision,double precision,double precision)double precision
Type-1 Gumbel Distributionrdf_gumbel1(double precision,double precision,double precision)double precision
Type-1 Gumbel Distributioncdf_gumbel1_p(double precision,double precision,double precision)double precision
Type-1 Gumbel Distributioncdf_gumbel1_q(double precision,double precision,double precision)double precision
Type-1 Gumbel Distributioncdf_gumbel1_pinv(double precision,double precision,double precision)double precision
Type-1 Gumbel Distributioncdf_gumbel1_qinv(double precision,double precision,double precision)double precision
Type-2 Gumbel Distributionrdf_gumbel2(double precision,double precision,double precision)double precision
Type-2 Gumbel Distributioncdf_gumbel2_p(double precision,double precision,double precision)double precision
Type-2 Gumbel Distributioncdf_gumbel2_q(double precision,double precision,double precision)double precision
Type-2 Gumbel Distributioncdf_gumbel2_pinv(double precision,double precision,double precision)double precision
Type-2 Gumbel Distributioncdf_gumbel2_qinv(double precision,double precision,double precision)double precision
Poisson Distributionrdf_poisson(integer,double precision)double precision
Poisson Distributioncdf_poisson_p(integer,double precision)double precision
Poisson Distributioncdf_poisson_q(integer,double precision)double precision
Bernoulli Distributionrdf_bernoulli(integer,double precision)double precision
Binomial Distributionrdf_binomial(integer,double precision,integer)double precision
Binomial Distributioncdf_binomial_p(integer,double precision,integer)double precision
Binomial Distributioncdf_binomial_q(integer,double precision,integer)double precision
Negative Binomial Distributionrdf_negative_binomial(integer,double precision,double precision)double precision
Negative Binomial Distributioncdf_negative_binomial_p(integer,double precision,double precision)double precision
Negative Binomial Distributioncdf_negative_binomial_q(integer,double precision,double precision)double precision
Pascal Distributionrdf_pascal(integer,double precision,integer)double precision
Pascal Distributioncdf_pascal_p(integer,double precision,integer)double precision
Pascal Distributioncdf_pascal_q(integer,double precision,integer)double precision
Geometric Distributionrdf_geometric(integer,double precision)double precision
Geometric Distributioncdf_geometric_p(integer,double precision)double precision
Geometric Distributioncdf_geometric_q(integer,double precision)double precision
Hypergeometric Distributionrdf_hypergeometric(integer,integer,integer,integer)double precision
Hypergeometric Distributioncdf_hypergeometric_p(integer,integer,integer,integer)double precision
Hypergeometric Distributioncdf_hypergeometric_q(integer,integer,integer,integer)double precision
Logarithmic Distributionrdf_logarithmic(integer,double precision)double precision

Dependencies

libgsl (GSL - GNU Scientific Library) package is required to compile this extension.

macOS (Homebrew):

brew install gsl openblas pkg-config

Requires PostgreSQL (installed separately via Homebrew or system package).

Linux:

sudo apt install gcc libgsl-dev libopenblas-dev pkg-config

PostgreSQL (dev headers and binaries) must be installed beforehand.

Installation

1.Clone the repo

git clone https://github.com/chanukyasds/pg_math.git

2.Compile and install

cd pg_math
make
make install

3.Create extension on database

CREATE EXTENSION pg_math;

Usage

select cdf_gaussian_qinv(0.05,5);