Skip to main content

CREATE FUNCTION

Create a user-defined scalar or table function.

Syntax

Parameters

ParameterDescription
function_nameName of the function to create
param_nameName of a function parameter
data_typeData type of the parameter
return_typeData type of the scalar return value
column_nameName of a column in the returned table
bodySQL query that computes the result

Examples

Scalar function

CREATE FUNCTION article_url(slug TEXT)
RETURNS TEXT AS $$
SELECT '/articles/' || slug
$$ LANGUAGE SQL;

SELECT title, article_url(slug) FROM articles;

Table function (dollar-quoted)

CREATE FUNCTION top_employees()
RETURNS TABLE(name TEXT, grade INTEGER)
AS $$
SELECT name, (2 * weight + age) / 10 AS grade
FROM employees
$$ LANGUAGE SQL;

SELECT * FROM top_employees();

Table function (BEGIN ATOMIC)

CREATE FUNCTION employees_above_grade(grade_threshold INTEGER)
RETURNS TABLE(name TEXT, grade INTEGER)
LANGUAGE SQL
BEGIN ATOMIC
SELECT name, (2 * weight + age) / 10 AS grade
FROM employees
WHERE (2 * weight + age) / 10 > grade_threshold;
END;

SELECT * FROM employees_above_grade(16);

Table function in a join

SELECT e.name, e.grade, d.department_name
FROM employees_above_grade(10) AS e
JOIN departments d ON e.department_id = d.id;

See also