PostgreSQL Functions

SQL functions in PostgreSQL are reusable blocks of code that perform operations and return a value. They allow encapsulating complex logic, calculations, or repeated queries to simplify development and maintain cleaner SQL code.

1. Types of Functions

  • Built-in Functions: Provided by PostgreSQL, such as SUM(), AVG(), LENGTH(), NOW(), etc.
  • User-Defined Functions (UDFs): Functions created by the user for custom logic.

2. Built-in Functions Examples

-- Aggregate functions
            SELECT AVG(salary) AS avg_salary, SUM(salary) AS total_salary
            FROM employees;

            -- String functions
            SELECT UPPER(name) AS upper_name, LENGTH(name) AS name_length
            FROM employees;

            -- Date/Time functions
            SELECT NOW() AS current_time, CURRENT_DATE AS today;

3. Creating a User-Defined Function

You can create a function in PostgreSQL using CREATE FUNCTION statement.

-- Function to calculate annual salary
            CREATE FUNCTION calculate_annual_salary(monthly_salary NUMERIC)
            RETURNS NUMERIC AS $$
            BEGIN
                RETURN monthly_salary * 12;
            END;
            $$ LANGUAGE plpgsql;

            -- Using the function
            SELECT name, calculate_annual_salary(salary) AS annual_salary
            FROM employees;

4. Function with Parameters

-- Function with multiple parameters
            CREATE FUNCTION salary_bonus(salary NUMERIC, bonus_percent NUMERIC)
            RETURNS NUMERIC AS $$
            BEGIN
                RETURN salary + (salary * bonus_percent / 100);
            END;
            $$ LANGUAGE plpgsql;

            -- Using the function
            SELECT name, salary_bonus(salary, 10) AS total_salary
            FROM employees;

5. Functions Returning Tables

Functions can return a table with multiple columns, acting like a parameterized view.

-- Function returning a table of employees in a department
            CREATE FUNCTION get_employees_by_department(dept_name TEXT)
            RETURNS TABLE(id INT, name TEXT, salary NUMERIC) AS $$
            BEGIN
                RETURN QUERY
                SELECT id, name, salary
                FROM employees
                WHERE department = dept_name;
            END;
            $$ LANGUAGE plpgsql;

            -- Using the function
            SELECT * FROM get_employees_by_department('IT');

6. Dropping a Function

-- Drop a function
            DROP FUNCTION IF EXISTS calculate_annual_salary(NUMERIC);

            -- Drop a function with multiple parameters
            DROP FUNCTION IF EXISTS salary_bonus(NUMERIC, NUMERIC);

7. Benefits of Functions

  • Encapsulate logic for reuse across multiple queries.
  • Simplify complex SQL operations and improve maintainability.
  • Allow parameterization to handle dynamic inputs.
  • Can improve performance by reducing repeated calculations.

8. Best Practices

  • Name functions clearly to indicate their purpose.
  • Use descriptive parameter names.
  • Document your functions for better maintainability.
  • Use set-returning functions carefully to avoid performance issues on large datasets.

Conclusion

PostgreSQL functions are a powerful feature that allows developers to encapsulate logic, perform calculations, and create reusable operations. By mastering built-in functions and user-defined functions, you can write cleaner, more maintainable, and efficient SQL queries. In the next tutorial, we will explore Aggregate Functions, which are commonly used for summarizing data in PostgreSQL.

Explore Related Tools

Hand-picked utilities and calculators related to this tool.

Related Tools