Append-only and snapshots with PostgreSQL?
The SQL:2011 standard has a feature known as temporal tables or system-versioned tables which might be helpful for this type of use-case. 

Basically, whenever you update or delete a record in the database, the database automatically holds on to the previous version of the record, including the time period when it was valid.

PostgreSQL doesn't support this feature natively, but there's an extension called temporal_tables. A tutorial can be found here. A few other DBMSes support temporal tables natively, including SQL Server 2016 and MariaDB 10.3.