Skip to main content
Documents
Basic SyntaxMath FunctionsDate FunctionsJSON FunctionsDatabasesTables & Schema ManagementString FunctionsTriggersIndexes

PostgreSQL OFFSET

The `OFFSET` clause in PostgreSQL is used to skip a specified number of rows before beginning to return rows from a query. This is particularly useful for implementing pagination in result sets.

Usage

The `OFFSET` clause is typically used in conjunction with `LIMIT` to paginate query results by skipping a specified number of rows. It is placed after the `ORDER BY` clause to ensure rows are skipped in a predictable order.


SELECT column1, column2, ...
FROM table_name
[ORDER BY column]
OFFSET number_of_rows;

In this syntax, `OFFSET number_of_rows` specifies how many rows should be omitted from the beginning of the result set.

Examples

1. Basic Offset


SELECT *
FROM employees
OFFSET 10;

This query skips the first 10 rows from the `employees` table, returning all subsequent rows.

2. Offset with Limit


SELECT *
FROM products
ORDER BY product_id
OFFSET 5
LIMIT 10;

The query skips the first 5 rows and then returns the next 10 rows, providing a paginated result set ordered by `product_id`.

3. Offset with Complex Query


SELECT customer_id, order_date
FROM orders
WHERE order_status = 'completed'
ORDER BY order_date DESC
OFFSET 20
LIMIT 5;

This example returns 5 rows after skipping the first 20 rows of completed orders, sorted by `order_date` in descending order.

Tips and Best Practices

  • Combine with `LIMIT`. Use `OFFSET` with `LIMIT` for effective pagination and to avoid unnecessary data retrieval.
  • Ensure consistent ordering. Always pair `OFFSET` with `ORDER BY` to ensure consistent and predictable results.
  • Performance considerations. Be cautious with large offsets as they can impact performance since all rows up to the offset point are still processed. Consider alternative pagination techniques if necessary.
  • Zero-based indexing. Remember that `OFFSET` is zero-based, so `OFFSET 0` will return all rows without skipping any.
  • Alternative Pagination Methods. For large datasets, consider using alternative methods such as cursors or keyset pagination, which can be more efficient by avoiding large offset processing.