PostgreSQL numeric data type

Learn about PostgreSQL numeric data type, its precision, and how it handles numerical values. Explore examples and best practices for efficient data..

PostgreSQL is a powerful open-source relational database management system known for its robust features and flexibility. One of the key aspects of managing data in PostgreSQL is understanding its various data types. 

PostgreSQL numeric data type

In this article, we will delve into the PostgreSQL numeric data type, exploring its characteristics, usage, and best practices.

Overview of Numeric Data Type

The numeric data type in PostgreSQL is a flexible data type used to store numbers with a user-defined precision and scale. It is capable of storing a wide range of numeric values, including integers, floating-point numbers, and arbitrary precision numbers.

Syntax

The syntax for defining a numeric column in PostgreSQL is as follows:

column_name NUMERIC(precision, scale)

Here, precision represents the total number of significant digits in the number, while scale represents the number of digits to the right of the decimal point.

Features and Characteristics

  • Precision and Scale: The numeric data type allows for precise control over the number of digits before and after the decimal point, making it suitable for applications that require accurate numerical calculations.
  • Arbitrary Precision: Unlike some other numeric data types, such as float or double precision, which have a fixed precision, numeric in PostgreSQL supports arbitrary precision. This means it can store numbers of virtually any size without loss of accuracy.
  • Storage Efficiency: While numeric values with a high precision and scale may require more storage space compared to integer or floating-point data types, PostgreSQL optimizes storage by compressing trailing zeros.
  • Mathematical Operations: Numeric values in PostgreSQL can be used in mathematical operations such as addition, subtraction, multiplication, and division with precision maintained according to the specified scale.
  • Compatibility: The numeric data type is fully compatible with SQL standards, making it interoperable with other database systems and ensuring portability of applications.

Usage of Numeric Data Type

Let's explore some common use cases and examples of using the numeric data type in PostgreSQL:

  1. Financial Applications: Numeric is well-suited for storing financial data such as currency amounts, transaction values, and interest rates with precision and accuracy.
    CREATE TABLE financial_data (
        transaction_id SERIAL PRIMARY KEY,
        amount NUMERIC(15, 2)
    );
  2. Scientific Calculations: Scientific and engineering applications often require precise numerical calculations, making the numeric data type ideal for storing experimental data, measurements, and computational results.
    CREATE TABLE experimental_results (
        experiment_id SERIAL PRIMARY KEY,
        measurement NUMERIC(20, 5)
    );
  3. Data Aggregation: Numeric data types are commonly used in aggregations and calculations involving large datasets, such as calculating averages, totals, and percentages.
    SELECT AVG(salary) AS average_salary FROM employees;

PostgreSQL Numeric Data Type Example

Let's create a sample table in PostgreSQL named "sales" with columns "product_id" and "revenue" to represent sales data. Then, I'll provide an example SQL query that demonstrates amount, percentage, and data aggregation using the NUMERIC data type.

-- Create the sales table
CREATE TABLE sales (
    product_id SERIAL PRIMARY KEY,
    revenue NUMERIC
);

-- Insert sample data into the sales table
INSERT INTO sales (revenue) VALUES
(1000),
(1500),
(2000),
(2500);
-- Query to calculate total revenue, percentage of revenue for each product, and average revenue
SELECT 
    SUM(revenue) AS total_revenue,
    revenue AS product_revenue,
    revenue / SUM(revenue) * 100 AS revenue_percentage,
    AVG(revenue) AS average_revenue
FROM sales
GROUP BY revenue;

Output:

 total_revenue | product_revenue | revenue_percentage | average_revenue 
---------------+-----------------+--------------------+-----------------
          7000 |            1000 | 14.285714285714285 |            1750
          7000 |            1500 | 21.428571428571427 |            1750
          7000 |            2000 | 28.571428571428573 |            1750
          7000 |            2500 | 35.714285714285715 |            1750
(4 rows)

In this example, SUM(revenue) calculates the total revenue across all products. revenue AS product_revenue retrieves the revenue of each product. revenue / SUM(revenue) * 100 AS revenue_percentage calculates the percentage of each product's revenue compared to the total revenue. AVG(revenue)  calculates the average revenue across all products.

Best Practices

To make the most of the numeric data type in PostgreSQL, consider the following best practices:

  • Choose Appropriate Precision and Scale: Determine the appropriate precision and scale based on the requirements of your application. Avoid excessive precision or scale, as it can lead to unnecessary storage overhead.
  • Use Numeric for Financial Data: For financial data that requires precise calculations and rounding, use the numeric data type instead of float or double precision to avoid rounding errors.
  • Optimize Performance: While numeric provides arbitrary precision, using excessively large numbers can impact query performance. Consider the performance implications when choosing the precision of numeric columns.
  • Use Numeric Constraints: Apply constraints such as CHECK constraints to enforce data integrity and ensure that numeric values fall within acceptable ranges.

Conclusion 

The numeric data type in PostgreSQL offers flexibility, precision, and performance for storing and manipulating numeric data. By understanding its features, characteristics, and best practices, developers can leverage the numeric data type effectively in their PostgreSQL databases, ensuring accuracy and reliability in their applications.