dbaugment - Augment a database
==============================

Name
----

dbaugment -- Augment a PostgreSQL database in predefined ways

Synopsys
--------

::

   dbaugment [option...] dbname [spec]

Description
-----------

:program:`dbaugment` is a utility for augmenting a PostgreSQL database
with various standard attributes and procedures, such as automatically
maintained audit columns.  The augmentations are defined in a
YAML-formatted ``spec`` file.

The specification file format is as follows::

 augmenter:
   columns:
     modified_date:
       not_null: true
       type: date
 schema public:
   table t1:
     audit_columns: default
   table t3:
     audit_columns: modified_only

The specification file lists each schema, and within it, each table to
be augmented.  Under each table the following values are recognized:

 - audit_columns: This indicates that audit trail columns are to be
   added to the table, e.g., a timestamp column recording when a row
   was last modified.

The first section of the specification file, under the ``augmenter``
header, lists configuration information. This is in addition to the
built-in configuration objects (see :ref:`predef-aug`).

:program:`dbaugment` first reads the database catalogs.  It also
initializes itself from predefined configuration information.
:program:`dbaugment` then reads the specification file, which may
include additional configuration objects, and outputs a YAML file,
including the existing catalog information together with the desired
enhancements.  The YAML file is suitable for input to
:program:`yamltodb` to generate the SQL statements to implement the
changes.

Options
-------

:program:`dbaugment` accepts the following command-line arguments (in
addition to the :doc:`cmdargs`):

**dbname**

    Specifies the name of the database whose schema is to augmented.

**spec**

    Location of the file with the augmenter specifications.  If this
    is omitted, the specification is read from the program's standard
    input.

Examples
--------

To augment a database called ``moviesdb`` according to the
specifications in the file ``moviesbl.yaml``::

  dbaugment moviesdb moviesbl.yaml

To add a column named ``updated`` to table ``public.film`` to hold the
date and time each row was inserted or updated, create a YAML
specification file, say ``film.yaml`` as follows::

 augmenter:
   columns:
     modified_timestamp:
       name: updated
 schema public:
   table film:
     audit_columns: modified_only

Then run the following command to generate the resulting database
specification, alter the table and create the needed trigger and
function.

 dbaugment moviesdb film.yaml | yamltodb moviesdb -u

See Also
--------

  :ref:`predef-aug`
