From f28d87abf7f16ca3aa21eb42f0f8d05d69868dbe Mon Sep 17 00:00:00 2001
From: Florents Tselai <florents.tselai@gmail.com>
Date: Mon, 3 Nov 2025 22:20:18 +0100
Subject: [PATCH v1] Add ago(interval) function to subtract interval from
 current timestamp

---
 doc/src/sgml/func/func-datetime.sgml     | 16 ++++++++++++++++
 src/backend/catalog/system_functions.sql |  6 ++++++
 src/include/catalog/pg_proc.dat          |  3 +++
 3 files changed, 25 insertions(+)

diff --git a/doc/src/sgml/func/func-datetime.sgml b/doc/src/sgml/func/func-datetime.sgml
index 8cd7150b0d3..c0b9830b638 100644
--- a/doc/src/sgml/func/func-datetime.sgml
+++ b/doc/src/sgml/func/func-datetime.sgml
@@ -359,6 +359,22 @@
         </para></entry>
        </row>
 
+       <row>
+        <entry role="func_table_entry">
+         <para role="func_signature">
+          <function>ago</function> ( <type>interval</type> )
+          <returnvalue>timestamptz</returnvalue>
+         </para>
+         <para>
+          Returns the current timestamp minus the specified interval.
+         </para>
+         <para>
+          <literal>ago(interval '1 hour')</literal>
+          <returnvalue>2025-11-03 14:42:31.123456+01</returnvalue>
+         </para>
+        </entry>
+       </row>
+
        <row>
         <entry role="func_table_entry"><para role="func_signature">
          <indexterm>
diff --git a/src/backend/catalog/system_functions.sql b/src/backend/catalog/system_functions.sql
index 2d946d6d9e9..c035d509608 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -127,6 +127,12 @@ CREATE OR REPLACE FUNCTION age(timestamp)
  STABLE PARALLEL SAFE STRICT COST 1
 RETURN age(cast(current_date as timestamp), $1);
 
+CREATE OR REPLACE FUNCTION ago(interval)
+    RETURNS timestamptz
+    LANGUAGE sql
+    STABLE PARALLEL SAFE STRICT COST 1
+RETURN current_timestamp - $1;
+
 CREATE OR REPLACE FUNCTION date_part(text, date)
  RETURNS double precision
  LANGUAGE sql
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 9121a382f76..58df79bf163 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -6481,6 +6481,9 @@
   proname => 'age', prolang => 'sql', provolatile => 's',
   prorettype => 'interval', proargtypes => 'timestamp',
   prosrc => 'see system_functions.sql' },
+{ oid => '2173', descr => 'current timestamp minus the specified interval', proname => 'ago', prolang => 'sql',
+  provolatile => 's', prorettype => 'timestamptz', proargtypes => 'interval',
+  prosrc => 'see system_functions.sql' },
 
 { oid => '2069', descr => 'adjust timestamp to new time zone',
   proname => 'timezone', prorettype => 'timestamptz',
-- 
2.49.0

