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.
