## 9.18. Set Returning Functions

This section describes functions that possibly return more than one row. Currently the only functions in this class are series generating functions, as detailed in Table 9.38, “Series Generating Functions”.

Table 9.38. Series Generating Functions

Function | Argument Type | Return Type | Description
--- | --- | --- | ---
``generate_series`(`start`, `stop`)` | `int` or `bigint` | `setof int` or `setof bigint` (same as argument type) | Generate a series of values, from `start` to `stop` with a step size of one
``generate_series`(`start`, `stop`, `step`)` | `int` or `bigint` | `setof int` or `setof bigint` (same as argument type) | Generate a series of values, from `start` to `stop` with a step size of `step`

When `step` is positive, zero rows are returned if `start` is greater than `stop`. Conversely, when `step` is negative, zero rows are returned if `start` is less than `stop`. Zero rows are also returned for `NULL` inputs. It is an error for `step` to be zero. Some examples follow:

    select * from generate_series(2,4);
     generate_series
    -----------------
                   2
                   3
                   4
    (3 rows)

    select * from generate_series(5,1,-2);
     generate_series
    -----------------
                   5
                   3
                   1
    (3 rows)

    select * from generate_series(4,3);
     generate_series
    -----------------
    (0 rows)

    select current_date + s.a as dates from generate_series(0,14,7) as s(a);
       dates
    ------------
     2004-02-05
     2004-02-12
     2004-02-19
    (3 rows)