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.94.2) (envelope-from ) id 1uwiur-006fFo-SB for pgsql-general@arkaria.postgresql.org; Thu, 11 Sep 2025 15:08:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uwiuq-008KAL-1N for pgsql-general@arkaria.postgresql.org; Thu, 11 Sep 2025 15:08:52 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uwiup-008KAD-KB for pgsql-general@lists.postgresql.org; Thu, 11 Sep 2025 15:08:52 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uwiul-000DG4-2P for pgsql-general@lists.postgresql.org; Thu, 11 Sep 2025 15:08:51 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-62ed68313b6so30278a12.3 for ; Thu, 11 Sep 2025 08:08:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757603328; x=1758208128; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=JBS/4NDMJOsXqMQcrxBTkmRcRAoXEObAaBlDOQuQ9Co=; b=IFfzi6uykUB3A1nJYVJzY0wG4LTU7upOzCiNkPHrlEWbUolw3/KULIyOmDixnhYkZ5 TvgIjen9H4dB+cdimD+iqLMZipaP/PzG09BNNLDdokGpNcguWZ8UR26a58mgNbeuuElu tzohJ+NmBV/8uQpJmDFaOY4U6zr640syyJd8I2STO61908ZKAJ3u/ULjv1jnwPIzU0Ek bMwkjiyEE+2rzh+hU5m4xeVqkRZUNE8pwl6w78HGIGjV8gYzSuDZ2uDKB7pFI/TvTSRc tVA1v9/hMnMFyha73upvkVVdIOi3Z4ZZw+SBuOM64gOFScUXF8t0KUnvu/6warCWauTw wlgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757603328; x=1758208128; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JBS/4NDMJOsXqMQcrxBTkmRcRAoXEObAaBlDOQuQ9Co=; b=YqG6wZSD0/ZUw1gJKWEzZEmcByHRdZmCniHMcgO6megLUJgN+X5FvBoTe4dmowX2i7 KP8bOWcql8J/Vix4JbvImoa56X/3cvgPcBic9nThEiJmBf1Fm5ebV3y5SeaFSWeN1jHj WR4fWScCydYl8VB5GOck1TjaNNSqEvWTyBYNXtVncAr+nILuhRmkKjNnFFcVK89VIWeB SC9Hn8Fiaq8IiKXpxE+KZH8RvaorFYnlEMjwG1CPJ1X13h3r3gGznpdXLhLiPtkstYGd lu3ppcT6b0O91sVrKCOGP22QUwyfBUSXcaPx1VOGK00suoxiYKNCS1lYuoxz3erMWXwe ha2A== X-Gm-Message-State: AOJu0Yzl/dJ1vSjZwdDSGGXRlDqilPdy5IWy2l5eBGTpOHDF1PxSkFiF IgyWWCuWldIXNf8c1F5566ZaZlqkWzvDGRw9sRHqv3lW3lObduNrWRgZQP+8rsTXWFp5xMbi+rN dNiprolz6y6uZ+k6wRTyISyIZ6KxHqsXlWvMs X-Gm-Gg: ASbGncve2PlYPY579PI1t9Bb4ZOWEca0bvnTlYX30AG6gVHcO6sZx2myNkFyG1Sb8vf IImMj1AhYFzTnGDBkHMS6TfZWRewDWCqLi3CJGqWHeUChbJKAnSShr/kxIUD+LzPK5XDoTfxHfa jCBRvTD6mxPPU0fh5pOQfxn7+NEmpr+5U8t38x6TV8rBuNwg03/szjPZtsXQ5s/Lw6rBXsAWLb2 pBG7uQmUuOo+DAAuD0HBrzO8A8FsfAT1hTpVsA= X-Google-Smtp-Source: AGHT+IGRRAQMbrvxtC+NUyNYb2pBeKiGKbHT9QrCeuNabyzhgIT0M9/q6u8MPe37V0fKLOPQaUIiAU+yWldRlEPtERY= X-Received: by 2002:a05:6402:24d3:b0:615:ad47:58c6 with SMTP id 4fb4d7f45d1cf-62380d72a73mr14956986a12.30.1757603327436; Thu, 11 Sep 2025 08:08:47 -0700 (PDT) MIME-Version: 1.0 From: Lorusso Domenico Date: Thu, 11 Sep 2025 17:08:10 +0200 X-Gm-Features: AS18NWAVQ4mMc8dbXIrgQWjA9B5KUWfQpnc03zOipLlltf-h92RaEremzbfZF2I Message-ID: Subject: =?UTF-8?Q?=5BAnnouncement=5D_=E2=80=8BA_Bitemporal_Solution_for_PostgreS?= =?UTF-8?Q?QL_=28Beta=29?= To: pgsql-general@lists.postgresql.org Content-Type: multipart/alternative; boundary="000000000000fced72063e87e92a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fced72063e87e92a Content-Type: text/plain; charset="UTF-8" Dear all, I am gald to share an open-source project I've been developing in my free time. It's a bitemporal solution built entirely within PostgreSQL, and while it's still in its early beta stages, it has the ambition to provide a comprehensive framework for temporal data management. The project is inspired by the need for a simple, yet powerful way to handle historical records and query data as it existed at any point in time. This solution is designed to be highly configurable and uses views with INSTEAD OF triggers to seamlessly manage inserts, updates, and deletes across _current and _history tables. Key features include: - *Bitemporal Support*: Tracks both "valid time" (when a fact is true in the real world) and "transaction time" (when the fact was recorded in the database). - *Automatic Historicization*: The system automatically creates and manages historical records, ensuring a complete, immutable audit trail. - *Trigger-based Logic*: The core logic is encapsulated in a vrsn.trigger_handler() function, making it easy to apply to any table via a view. - *Configurable Behavior*: A set of parameters and state variables ( vrsn.tar_state_variables) allows for fine-grained control over versioning, conflict resolution, and other behaviors. - *Adherence to Bitemporal Theory*: The framework is designed to be fully compliant with the bitemporal model proposed by Snodgrass. - *Pure SQL & Transparency*: The solution is built using pure PostgreSQL functions and types, requiring *no external extensions*, and it maintains a *transparent data structure* that does not mask the underlying tables. This project is a work in progress, and I would love to get your feedback and collaboration to improve it. If the concept interests you and you'd like to dive into the code or offer some guidance, your expertise would be highly valued. Thank you for your time and consideration. Bye -- Domenico L. --000000000000fced72063e87e92a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Dear all,

I am gald to share an open-source project I've been developing in= my free time. It's a bitemporal solution built entirely within Postgre= SQL, and while it's still in its early beta stages, it has the ambition= to provide a comprehensive framework for temporal data management. The pro= ject is inspired by the need for a simple, yet powerful way to handle histo= rical records and query data as it existed at any point in time.

=

This solution is designed to be highly co= nfigurable and uses views with = INSTEAD OF triggers to seamles= sly manage inserts, updates, and deletes across _current and = _history tables. Key features include:

  • <= strong>Bitemporal Support: Tracks both "valid time" (when a fa= ct is true in the real world) and "transaction time" (when the fa= ct was recorded in the database).

  • Automatic Historicization: The system automatically creates and manages historical = records, ensuring a complete, immutable audit trail.

  • = Trigger-based Logic<= span class=3D"gmail-selected">: The core logic is encapsulated in a = vrsn.trigger_handler() function, making it easy to apply to any tabl= e via a view.

  • = Configurable Behavior: A set= of parameters and state variables (vrsn.tar_state_variables)= allows for fine-grained control over versioning, conflict resolution, and = other behaviors.

  • Adherence to Bitemporal Theory: The framework is designed to be fully compliant with the bitemporal = model proposed by Snodgrass.

  • Pure SQL & Transparency: The solution is built using pure PostgreSQL functions and t= ypes, requiring no external e= xtensions, and it maintains = a transparent data structure<= /span> that does not mask the under= lying tables.

This pr= oject is a work in progress, and I would love to get your feedback and coll= aboration to improve it. If the concept interests you and you'd like to= dive into the code or offer some guidance, your expertise would be highly = valued.

Thank you for your time= and consideration.

Bye



--
Domenico L.

--000000000000fced72063e87e92a--