Skip to content

Commit

Permalink
Only reproduce the changes in sequence characteristics. ALTER SEQUENC…
Browse files Browse the repository at this point in the history
…E were generated for all sequences of the group. And they systematically reset all the sequence characteristics. Now, only the characteristics that have changed between the requested start and end point in time are included into the ALTER SEQUENCE. And sequences that have not changed at all are bypassed. Restructure the ALTER SEQUENCE generation by using a new function shared with the sequence rollback function.
  • Loading branch information
beaud76 committed Sep 13, 2019
1 parent 1e9e0c0 commit 86aab9f
Show file tree
Hide file tree
Showing 35 changed files with 1,127 additions and 890 deletions.
5 changes: 4 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ E-Maj - Change log
* In the emaj_gen_sql_group() and emaj_gen_sql_groups() functions, a NULL
value for the "output file" parameter prepares the SQL script in a
temporary table that can be then accessed via a emaj_sql_script view.
Also set an ISO DateStyle session parameter in the generated scripts.
* In SQL scripts generated by the emaj_gen_sql_group() and
emaj_gen_sql_groups() functions, set an ISO DateStyle session parameter
and generate the ALTER SEQUENCE statements to only reproduce the sequence
characteristics changes.
* The new emaj_assign_table(), emaj_assign_tables(), emaj_remove_table(),
emaj_remove_tables(), emaj_assign_sequence(), emaj_assign_sequences(),
emaj_remove_sequence() and emaj_remove_sequences() functions allow to
Expand Down
9 changes: 4 additions & 5 deletions docs/en/extractionFunctions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ The structure of log tables is described :ref:`here <logTableStructure>`.
SQL script generation to replay logged updates
----------------------------------------------

Log tables contain all needed information to replay updates. Therefore, it is possible to generate SQL statements corresponding to all updates that occurred between two marks or between a mark and the current situation, and record them into a file. This is the purpose of the *emaj_gen_sql_group()* function.
Log tables contain all needed information to replay updates. Therefore, it is possible to generate SQL statements corresponding to all updates that occurred between two marks or between a mark and the current situation. This is the purpose of the *emaj_gen_sql_group()* function.

So these updates can be replayed after the corresponding tables have been restored in their state at the initial mark, without being obliged to rerun application programs.

Expand All @@ -103,7 +103,7 @@ A *NULL* value or an empty string may be used as end mark, representing the curr

The keyword *'EMAJ_LAST_MARK'* can be used as mark name, representing the last set mark.

The output file name must be supplied as an absolute pathname. It must have the appropriate permission so that the PostgreSQL instance can write to it. If the file already exists, its content is overwritten.
If supplied, the output file name must be an absolute pathname. It must have the appropriate permission so that the PostgreSQL instance can write to it. If the file already exists, its content is overwritten.

The output file name may be set to NULL. In this case, the SQL script is prepared in a temporary table that can then be accessed through a temporary view, *emaj_sql_script*. Using *psql*, the script can be exported with both commands::

Expand All @@ -112,7 +112,7 @@ The output file name may be set to NULL. In this case, the SQL script is prepare

This method allows to generate a script in a file located outside the file systems accessible by the PostgreSQL instance.

The last parameter of the emaj_gen_sql_group() function is optional. It allows filtering of the tables and sequences to process. If the parameter is omitted or has a *NULL* value, all tables and sequences of the tables group are processed. If specified, the parameter must be expressed as a non empty array of text elements, each of them representing a schema qualified table or sequence name. Both syntaxes can be used::
The last parameter of the *emaj_gen_sql_group()* function is optional. It allows filtering of the tables and sequences to process. If the parameter is omitted or has a *NULL* value, all tables and sequences of the tables group are processed. If specified, the parameter must be expressed as a non empty array of text elements, each of them representing a schema qualified table or sequence name. Both syntaxes can be used::

ARRAY['sch1.tbl1','sch1.tbl2']

Expand Down Expand Up @@ -144,7 +144,7 @@ The used technology may result to doubled backslashes in the output file. These

sed 's/\\\\/\\/g' <file.name> | psql ...

As the function can generate a large or even very large file (depending on the log volume), it is the user's responsibility to provide a sufficient disk space.
As the function can generate a large, or even very large, file (depending on the log volume), it is the user's responsibility to provide a sufficient disk space.

It is also the user's responsibility to deactivate application triggers, if any exist, before executing the generated script.

Expand All @@ -153,4 +153,3 @@ Using the *emaj_gen_sql_groups()* function, it is possible to generate a sql scr
SELECT emaj.emaj_gen_sql_groups('<group.names.array>', '<start.mark>', '<end.mark>', '<file>' [, <tables/sequences.array>);

More information about :doc:`multi-groups functions <multiGroupsFunctions>`.

9 changes: 4 additions & 5 deletions docs/fr/extractionFunctions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ La structure des tables de log est décrite :ref:`ici <logTableStructure>`.
Génération de scripts SQL rejouant les mises à jour tracées
-----------------------------------------------------------

Les tables de log contiennent toutes les informations permettant de rejouer les mises à jour. Il est dès lors possible de générer des requêtes SQL correspondant à toutes les mises à jour intervenues entre 2 marques particulières ou à partir d'une marque, et de les enregistrer dans un fichier. C'est l'objectif de la fonction *emaj_gen_sql_group()*.
Les tables de log contiennent toutes les informations permettant de rejouer les mises à jour. Il est dès lors possible de générer des requêtes SQL correspondant à toutes les mises à jour intervenues entre 2 marques particulières ou à partir d'une marque. C'est l'objectif de la fonction *emaj_gen_sql_group()*.

Ceci peut permettre de ré-appliquer des mises à jour après avoir restauré les tables du groupe dans l'état correspondant à la marque initiale, sans avoir à ré-exécuter aucun traitement applicatif.

Expand All @@ -102,7 +102,7 @@ Un *NULL* ou une chaîne vide peuvent être utilisés comme marque de fin. Ils r

Le mot clé *'EMAJ_LAST_MARK'* peut être utilisé comme marque de fin. Il représente alors la dernière marque posée.

Le nom du fichier de sortie doit être exprimé sous forme de chemin absolu. Le fichier doit disposer des permissions adéquates pour que l'instance postgreSQL puisse y écrire. Si le fichier existe déjà, son contenu est écrasé.
S'il est fourni, le nom du fichier de sortie doit être exprimé sous forme de chemin absolu. Le fichier doit disposer des permissions adéquates pour que l'instance postgreSQL puisse y écrire. Si le fichier existe déjà, son contenu est écrasé.

Le nom du fichier de sortie peut prendre une valeur NULL. Dans ce cas, le script SQL est préparé dans une table temporaire, accessible ensuite au travers d’une vue temporaire *emaj_sql_script*. A partir du client *psql*, on peut donc enchaîner dans une même session ::

Expand All @@ -111,7 +111,7 @@ Le nom du fichier de sortie peut prendre une valeur NULL. Dans ce cas, le script

Cette méthode permet de générer un fichier en dehors des systèmes de fichiers accessibles par l’instance PostgreSQL.

Le dernier paramètre de la fonction emaj_gen_sql_group() est optionnel. Il permet de filtrer la liste des tables et séquences à traiter. Si le paramètre est omis ou a la valeur *NULL*, toutes les tables et séquences du groupe de tables sont traitées. S'il est spécifié, le paramètre doit être exprimé sous la forme d'un tableau non vide d'éléments texte, chacun d'eux représentant le nom d'une table ou d'une séquence préfixé par le nom de schéma. On peut utiliser indifféremment les syntaxes ::
Le dernier paramètre de la fonction *emaj_gen_sql_group()* est optionnel. Il permet de filtrer la liste des tables et séquences à traiter. Si le paramètre est omis ou a la valeur *NULL*, toutes les tables et séquences du groupe de tables sont traitées. S'il est spécifié, le paramètre doit être exprimé sous la forme d'un tableau non vide d'éléments texte, chacun d'eux représentant le nom d'une table ou d'une séquence préfixé par le nom de schéma. On peut utiliser indifféremment les syntaxes ::

ARRAY['sch1.tbl1','sch1.tbl2']

Expand Down Expand Up @@ -143,7 +143,7 @@ La technique mise en œuvre aboutit à avoir des caractères antislash doublés

sed 's/\\\\/\\/g' <nom_fichier> | psql ...

Comme la fonction peut générer un gros voire très gros fichier (en fonction du volume des logs), il est de la responsabilité de l'utilisateur de prévoir un espace disque suffisant.
Comme la fonction peut générer un gros, voire très gros, fichier (en fonction du volume des logs), il est de la responsabilité de l'utilisateur de prévoir un espace disque suffisant.

Il est aussi de la responsabilité de l'utilisateur de désactiver d'éventuels triggers applicatifs avant d'exécuter le script généré.

Expand All @@ -152,4 +152,3 @@ La fonction *emaj_gen_sql_groups()* permet de générer des scripts SQL portant
SELECT emaj.emaj_gen_sql_groups('<tableau.des.groupes>', '<marque.début>', '<marque.fin>', '<fichier>'[,<liste.tables.séquences>]);

Plus d'information sur les :doc:`fonctions multi-groupes <multiGroupsFunctions>`.

0 comments on commit 86aab9f

Please sign in to comment.