Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vVm9Y-007bxy-19 for pgsql-general@arkaria.postgresql.org; Wed, 17 Dec 2025 07:40:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vVm9X-00B3Dh-0J for pgsql-general@arkaria.postgresql.org; Wed, 17 Dec 2025 07:40:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vVm9W-00B3DY-2L for pgsql-general@lists.postgresql.org; Wed, 17 Dec 2025 07:40:55 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vVm9V-0016jl-0d for pgsql-general@lists.postgresql.org; Wed, 17 Dec 2025 07:40:54 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-477b91680f8so53014755e9.0 for ; Tue, 16 Dec 2025 23:40:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leisi.net; s=google; t=1765957251; x=1766562051; darn=lists.postgresql.org; h=to:date:message-id:subject:mime-version:content-transfer-encoding :from:from:to:cc:subject:date:message-id:reply-to; bh=ZJY2RZ2KM11iyL3S34jAOL5wnf6mtVT6cxfZBW+aLn8=; b=SbwkaOcCMdPKPJdaKt6EmvhZjxWsjdWsiOQtMRhl9FYr4cXsVtimzG9cIqszvzh/6h zUWdPPi/betYRwsNdiw8hNZthkbY+8F5vcqORWixBT8GMEMNJmA6+nBdSnNKTcPV8xxf zIOi3dYFeQzx5O1+M5CA8XIXup0FlfUwVuvEo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765957251; x=1766562051; h=to:date:message-id:subject:mime-version:content-transfer-encoding :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZJY2RZ2KM11iyL3S34jAOL5wnf6mtVT6cxfZBW+aLn8=; b=JT1+k21eUaiwuvMBueNhHspVZ9ckZGcuSlo2qXYSGXLSdhVcI6wNzcLsmfF16/Pv7t tvV78Q+APvCX8IuYZSg9Y9iu/v07Aq4etUHGMZVAoQB1ldio0xJspda4g81EeTUIR3Bj WJA3GObWgJs6E9YPmZEC3HeYVCUZWE0UQwcEW7bqG3mVvpHO3OsKBMnXJ/GkeuQEk3Mz EJBiMHSJiTyOkG2IiyWg66EhrSGWNbC2FSqfvX9LREfbr75bGmrlw9pn0oJPGU4/Cf67 9XaZMcwYhN46akKWo0snJ4VYc/CNE8NK4iMV7VAWNSlzAeZPNSLlsJtS52KvbtSGhamK 4ZFw== X-Gm-Message-State: AOJu0Yyb4gtfTmh4vskXpTBJ+hkq3RHbJ8fY0IBaYjt9uDs2JKJv9ZbW Ebdve7wawP+77V15zhpxGXNcJo6maKISP2rGg1Ou3mrK9Ao0/grnH4PH6UTLh2LNNMYX4IRlH9n ym7ZYhQ== X-Gm-Gg: AY/fxX7gMoGTHTOtZ62B7tFQavAFC6MiKjiEBcRh7OxP+fJZcGBU81wwJ9hO629X8zP gp0ILYsd5tjAHOLMufByBlU5wYdKGIp6AUm4hzjt/wdVZdJdtYDz+YbUFxmR3ABDs9seX89zp5p fdcyWpvGfAP3TpxcH7eHdcbmdd4+vlL2V5Yo/9bTnprd1t/3+Fz+KP475A5WdUX0IVagt006ETk k/GH4nxYCRK17BV6RPtGaGNJk+TluH5rQ8vmI0WfgJNcMQtm5rJSjri2cU38X4TRDANyXkl7KkM KAbt4njISNNjqn00Nw+nQxTz21/dUrkv5OUJNg2lwzQmq6/vdeqijYIGI8E5Cy1Vp9iOr9EqVU+ m0hhkk8VaiTIRnjMTAWY5GUH36Tykd1laC+7VdRhUrMg/vGrSQu3Qu77i/n+Jvl+rBTd9pPM4GG 8TcQGKSlb9Zb0utBP7AHSRXvB0SiKKl8/2bS2b X-Google-Smtp-Source: AGHT+IGq9nZZjcCnwlnKVVObknJRPPmc0MqM0BPQBsl/8XpyuzEpDvtAUX3L3lT5Y+rVgEjnBT55CQ== X-Received: by 2002:a05:600c:4e91:b0:477:c37:2ea7 with SMTP id 5b1f17b1804b1-47a8f904609mr177482155e9.21.1765957251109; Tue, 16 Dec 2025 23:40:51 -0800 (PST) Received: from smtpclient.apple ([2a02:169:ce0e:0:7471:8ef8:5c1b:6b9a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47bdc1d991fsm26313135e9.5.2025.12.16.23.40.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Dec 2025 23:40:50 -0800 (PST) From: Matthias Leisi Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.200.81.1.6\)) Subject: Record last SELECT on a row? Message-Id: <287E4DF6-35A2-4062-AEBA-32DB1DE35C5D@leisi.net> Date: Wed, 17 Dec 2025 08:40:39 +0100 To: "pgsql-generallists.postgresql.org" X-Mailer: Apple Mail (2.3864.200.81.1.6) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk An application (which we can=E2=80=99t change) is accessing some = Postgres table, and we would like to record when the rows in that table = were last read (meaning: appeared in a SELECT result). The ultimate goal = would be that we can =E2=80=9Eage out=E2=80=9C rows which have not been = accessed in a certain period of time. The table contains some ten thousand rows, five columns, and we already = record created / last updated using triggers. Almost all accesses will = result in zero, one or very few records returned. Given the modest size = of the table, performance considerations are not top priority. If we had full control over the application, we could eg use a function = to select the records and then update some =E2=80=9Elast read=E2=80=9C = column. But since we don=E2=80=99t control the application, that=E2=80=99s= not an option. On the other hand, we have full control over the = database, so we could put some other =E2=80=9Eobject=E2=80=9C in lieu of = the direct table. Any other ways this could be achieved? Thanks, Matthias