The restore API also allows for persisting a restored recordset as either a VIEW (default), MATERIALIZED VIEW or TABLE. Therefore, use the pgmemento.restore_table_state function where you can also address a new target schema for storing the history. With the last flag parameter you choose to overrite already restored entities.

sql SELECT pgmemento.restore_table_state( start_from_tid := 1, end_at_tid := 10, original_table_name := 'table_A', original_schema_name := 'public', target_schema_name := 'target_schema', target_table_type := 'VIEW', update_state := TRUE );

Persist a whole schema

With the pgmemento.restore_schema_state state function you can restore all logged tables of a given schema. It will check the audit_table_log table to see which tables need to recreated for the requested transaction ID filter.

sql SELECT pgmemento.restore_table_state( start_from_tid := 1, end_at_tid := 10, original_table_name := 'public', target_schema_name := 'target_schema', target_table_type := 'VIEW', update_state := TRUE );

Work with a past state

If past states were restored as tables they do not have primary keys or indexes assigned to them. References between tables are lost as well. If the user wants to work on the restored table or database state - like he would do with the production state - he can use the procedures pgmemento.pkey_table_state, pgmemento.fkey_table_state and pgmemento.index_table_state. These procedures create primary keys, foreign keys and indexes on behalf of the recent constraints defined in the production schema.

Note: If table and/or database structures have changed fundamentally over time it might not be possible to recreate constraints and indexes as their metadata is not yet logged by pgMemento.