Automate schema migrations using DizzleORM and GitHub Actions - Manage thousands of tenants with this workflow

PostgreSQL CLOCK_TIMESTAMP() Function

Summary: in this tutorial, you will learn how to use the PostgreSQL CLOCK_TIMESTAMP() function to return the current date and time.

Introduction to the PostgreSQL CLOCK_TIMESTAMP() function

The CLOCK_TIMESTAMP() function returns the current date and time with a timezone.

Here’s the basic syntax of the CLOCK_TIMESTAMP() function:

CLOCK_TIMESTAMP()

The CLOCK_TIMESTAMP() function has no parameters.

The CLOCK_TIMESTAMP() function returns the current date and time as a timestamp with a timezone.

When you call the CLOCK_TIMESTAMP() function multiple times within a statement, you’ll get different results.

PostgreSQL CLOCK_TIMESTAMP() function examples

Let’s take some examples of using the CLOCK_TIMESTAMP() function.

1) Basic CLOCK_TIMESTAMP() function example

The following example uses the CLOCK_TIMESTAMP() function to obtain the current date and time:

SELECT CLOCK_TIMESTAMP();

Output:

clock_timestamp
-------------------------------
 2024-03-20 14:49:07.875891-07
(1 row)

The result is a timestamp with a time zone.

2) Calling CLOCK_TIMESTAMP() function multiple times within a statement

The following example calls the CLOCK_TIMESTAMP() function multiple times within a statement:

SELECT
  clock_timestamp(),
  pg_sleep(3),
  clock_timestamp(),
  pg_sleep(3),
  clock_timestamp();

Output:

-[ RECORD 1 ]---+------------------------------
clock_timestamp | 2024-03-20 14:51:21.92144-07
pg_sleep        |
clock_timestamp | 2024-03-20 14:51:24.924244-07
pg_sleep        |
clock_timestamp | 2024-03-20 14:51:27.931263-07

The output shows that the CLOCK_TIMESTAMP() function returns the actual date and time between the calls within the same statement.

3) Using the CLOCK_TIMESTAMP() function to measure the execution time of a statement

First, define a new function called time_it to measure the execution time of a statement:

CREATE OR REPLACE FUNCTION time_it(
    p_statement TEXT
) RETURNS NUMERIC AS $$
DECLARE
    start_time TIMESTAMP WITH TIME ZONE;
    end_time TIMESTAMP WITH TIME ZONE;
    execution_time NUMERIC; -- ms
BEGIN
    -- Capture start time
    start_time := CLOCK_TIMESTAMP();

    -- Execute the statement
    EXECUTE p_statement;

    -- Capture end time
    end_time := CLOCK_TIMESTAMP();

    -- Calculate execution time in milliseconds
    execution_time := EXTRACT(EPOCH FROM end_time - start_time) * 1000;

    RETURN execution_time;
END;
$$ LANGUAGE plpgsql;

Second, use the time_it() function to measure the execution time of the statement that uses the pg_sleep() function:

SELECT time_it('SELECT pg_sleep(1)');

Output:

time_it
-------------
 1007.731000

It takes about 1008 ms or 1s to complete.

Summary

  • Use the CLOCK_TIMESTAMP() function to return the current date and time.

Last updated on

Was this page helpful?