VARIADIC parameters let you pass a flexible number of arguments to a function. This helps when you don't know how many inputs you will get.
VARIADIC parameters in PostgreSQL
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
PostgreSQL
CREATE FUNCTION function_name(VARIADIC param_name data_type[]) RETURNS return_type AS $$ BEGIN -- function body END; $$ LANGUAGE plpgsql;
The VARIADIC keyword must be used before the last parameter in the function.
The parameter with VARIADIC must be an array type.
Examples
PostgreSQL
CREATE FUNCTION sum_numbers(VARIADIC nums int[]) RETURNS int AS $$ DECLARE total int := 0; n int; BEGIN FOREACH n IN ARRAY nums LOOP total := total + n; END LOOP; RETURN total; END; $$ LANGUAGE plpgsql;
PostgreSQL
SELECT sum_numbers(1, 2, 3, 4);
PostgreSQL
CREATE FUNCTION concat_texts(VARIADIC texts text[]) RETURNS text AS $$ BEGIN RETURN array_to_string(texts, ', '); END; $$ LANGUAGE plpgsql;
PostgreSQL
SELECT concat_texts('apple', 'banana', 'cherry');
Sample Program
This function greets each name passed to it. If no names are given, it says 'Hello, nobody!'.
PostgreSQL
CREATE FUNCTION greet_people(VARIADIC names text[]) RETURNS text AS $$ DECLARE result text := ''; name text; BEGIN IF array_length(names, 1) IS NULL THEN RETURN 'Hello, nobody!'; END IF; FOREACH name IN ARRAY names LOOP result := result || 'Hello, ' || name || '! '; END LOOP; RETURN trim(result); END; $$ LANGUAGE plpgsql; SELECT greet_people('Alice', 'Bob', 'Charlie');
Important Notes
You can call a VARIADIC function with an array by using VARIADIC keyword in the call, like: SELECT func(VARIADIC array);
VARIADIC parameters must be the last parameter in the function definition.
Summary
VARIADIC lets functions accept flexible numbers of arguments as an array.
Use VARIADIC for cleaner code when input count varies.
Remember VARIADIC parameter must be last and is always an array type.
Practice
1. What does the
VARIADIC keyword do in a PostgreSQL function?easy
Solution
Step 1: Understand the role of VARIADIC
VARIADIC allows a function to accept any number of arguments as a single array parameter.Step 2: Compare with other options
Options B, C, and D describe unrelated function features.Final Answer:
Allows the function to accept a variable number of arguments as an array -> Option CQuick Check:
VARIADIC = variable arguments as array [OK]
Hint: VARIADIC means flexible argument count packed as array [OK]
Common Mistakes:
- Thinking VARIADIC returns multiple result sets
- Confusing VARIADIC with triggers
- Assuming VARIADIC changes function volatility
2. Which of the following is the correct syntax to declare a VARIADIC parameter in a PostgreSQL function?
easy
Solution
Step 1: Identify correct VARIADIC syntax
VARIADIC must precede the parameter name and the parameter type must be an array type, e.g.,VARIADIC nums int[].Step 2: Check each option
CREATE FUNCTION example(VARIADIC nums int[]) RETURNS int AS $$ ... $$ LANGUAGE sql; correctly places VARIADIC before the parameter name and uses an array type. Options A, B, and C misuse the position or syntax of VARIADIC.Final Answer:
CREATE FUNCTION example(VARIADIC nums int[]) RETURNS int AS $$ ... $$ LANGUAGE sql; -> Option AQuick Check:
VARIADIC before param name + array type = correct syntax [OK]
Hint: VARIADIC goes before param name and uses array type [OK]
Common Mistakes:
- Placing VARIADIC after parameter name
- Using non-array type with VARIADIC
- Putting VARIADIC after RETURNS keyword
3. Given the function:
What is the result of
CREATE FUNCTION sum_all(VARIADIC nums int[]) RETURNS int AS $$ SELECT SUM(n) FROM unnest(nums) AS n; $$ LANGUAGE sql;
What is the result of
SELECT sum_all(2, 4, 6);?medium
Solution
Step 1: Understand VARIADIC input
The function accepts any number of integers as separate arguments, packed into an array named nums.Step 2: Calculate the sum
Input arguments 2, 4, 6 become array [2,4,6]. The function sums these values: 2 + 4 + 6 = 12.Final Answer:
12 -> Option BQuick Check:
Sum of 2,4,6 = 12 [OK]
Hint: VARIADIC packs inputs as array; sum them inside function [OK]
Common Mistakes:
- Expecting an array output instead of sum
- Thinking VARIADIC requires explicit array input
- Assuming function errors on multiple arguments
4. Consider this function definition:
Which error will occur if you call
CREATE FUNCTION concat_texts(VARIADIC texts text) RETURNS text AS $$ SELECT string_agg(t, ',') FROM unnest(texts) AS t; $$ LANGUAGE sql;
Which error will occur if you call
SELECT concat_texts('hello', 'world');?medium
Solution
Step 1: Check VARIADIC parameter type
The parametertextsis declared astext, nottext[]. VARIADIC requires an array type.Step 2: Identify error cause
PostgreSQL will raise a syntax error because VARIADIC must be followed by an array type, e.g.,VARIADIC texts text[].Final Answer:
Error: VARIADIC parameter must be declared as an array type -> Option AQuick Check:
VARIADIC needs array type parameter [OK]
Hint: VARIADIC param must be array type, else syntax error [OK]
Common Mistakes:
- Declaring VARIADIC param as scalar type
- Expecting no error with wrong type
- Confusing error with missing FROM clause
5. You want to create a function that accepts a fixed integer and then any number of text arguments variadically. Which of these function declarations is correct?
hard
Solution
Step 1: Recall VARIADIC position rule
VARIADIC parameter must be the last parameter in the function declaration.Step 2: Check parameter types and order
CREATE FUNCTION example(fixed int, VARIADIC texts text[]) RETURNS text AS $$ ... $$ LANGUAGE sql; places fixed int first and VARIADIC texts text[] last, which is correct. CREATE FUNCTION example(VARIADIC texts text[], fixed int) RETURNS text AS $$ ... $$ LANGUAGE sql; places VARIADIC first, which is invalid. CREATE FUNCTION example(fixed int, texts VARIADIC text[]) RETURNS text AS $$ ... $$ LANGUAGE sql; misplaces VARIADIC keyword. CREATE FUNCTION example(fixed int, VARIADIC texts text) RETURNS text AS $$ ... $$ LANGUAGE sql; uses non-array type with VARIADIC.Final Answer:
CREATE FUNCTION example(fixed int, VARIADIC texts text[]) RETURNS text AS $$ ... $$ LANGUAGE sql; -> Option DQuick Check:
VARIADIC last and array type = correct [OK]
Hint: VARIADIC param must be last and array type [OK]
Common Mistakes:
- Placing VARIADIC parameter before fixed parameters
- Using scalar type with VARIADIC
- Misplacing VARIADIC keyword after parameter name
