## 2.05 2018-08-31

Environment Variable Options and Exclude Temporary/Unlogged Relations

Fix issue where relative links in $PGDATA could be stored in the backup with the wrong path.

This issue did not affect absolute links and relative tablespace links were caught by other checks.

Remove incompletely implemented online option from the check command.

Offline operation runs counter to the purpose of this command, which is to check if archiving and backups are working correctly.

Fix issue where errors raised in C were not logged when called from Perl.

properly terminated with the correct error code but lacked an error message to aid in debugging.

Fix issue when a boolean option (e.g. delta) was specified more than once.

Allow any option to be set in an environment variable.

This includes options that previously could only be specified on the command line, e.g. stanza, and secret options that could not be specified on the command-line, e.g. repo1-s3-key-secret.

Exclude temporary and unlogged relation (table/index) files from backup.

Implemented using the same logic as the patches adding this feature to , 8694cc96 and 920a5e50. Temporary relation exclusion is enabled in &ge; 9.0. Unlogged relation exclusion is enabled in &ge; 9.1, where the feature was introduced.

Allow arbitrary directories and/or files to be excluded from a backup.

Misuse of this feature can lead to inconsistent backups so read the --exclude documentation carefully before using.

Add log-subprocess option to allow file logging for local and remote subprocesses.

11 Beta 3 support.

Allow zero-size files in backup manifest to reference a prior manifest regardless of timestamp delta.

Improve asynchronous archive-get/archive-push performance by directly checking status files.

Improve error message when a command is missing the stanza option.

Validate configuration options in a single pass. By pre-calculating and storing the option dependencies in parse.auto.c validation can be completed in a single pass, which is both simpler and faster.

Add gzip compression/decompression filters for C.

Improve performance of string to int conversion. Use `strtoll()` instead of `sprintf()` for conversion. Also use available integer min/max constants rather than hard-coded values.

Add `uint64` variant type and supporting conversion functions.

Add basic C JSON parser.

Migrate minimum set of code for reading archive.info files from Perl to C.

Allow `Buffer` object used size to be different than allocated size. Add functions to manage used size and remaining size and update automatically when possible.

Abstract IO layer out of the storage layer. This allows the routines to be used for IO objects that do not have a storage representation. Implement buffer read and write IO objects. Implement filters and update `cryptoHash` to use the new interface. Implement size and buffer filters.

`storageFileRead()` accepts a buffer for output rather than creating one. This is more efficient overall and allows the caller to specify how many bytes will be read on each call. Reads are appended if the buffer already contains data but the buffer size will never increase.

Add `iniSectionList()` to `Ini` object and remove dead code.

Manifest improvements. Require catalog version when instantiating a `Manifest` object (and not loading it from disk). Prevent manifest from being built more than once. Limit manifest build recursion (i.e. links followed) to sixteen levels to detect link loops.

Do nothing in `memContextMove()` when the context is already in the specified parent.

Allow command/option constants to autonumber in both C and Perl to reduce churn when a new command/option is added.

Show exact log level required for stack trace param output instead of just debug.

Update `Archive::Info->archiveIdList()` to return a valid error code instead of unknown.

Add `cvtBoolToConstZ()` to simplify conversion of boolean to string.

Add `cvtZToUInt()` to convert string to unsigned int.

Enable -Wstrict-prototypes, -Wpointer-arith, -Wduplicated-branches, -Wvla, and -Wduplicated-cond and update code to conform where necessary.

Rename error-handling variables in `Main.pm` to conform to standard.

Remove redundant lines from embedded Perl by combining blank lines.

Define cipher magic size with `sizeof()` rather than using a constant.

Add `cvtCharToZ()` and macro for debugging `char` params.

Add `strReplaceChr()` to `String` object.

Correct OptionInvalidError to OptionInvalidValueError in boolean option parsing.

Fix invalid log level in log-path option reference.

Stop trying to arrange contributors in release.xml by last/first name.

Contributor names have always been presented in the release notes exactly as given, but we tried to assign internal IDs based on last/first name which can be hard to determine and ultimately doesn't make sense. Inspired by Christophe's PostgresOpen 2017 talk, Human Beings Do Not Have a Primary Key.

Allow containers to be defined in a document. The defined containers are built before the document build begins which allows them to be reused.

Move most host setup to containers defined in the documentation. This includes installation which had previously been included in the documentation. This way produces faster builds and there is no need for us to document installation.

Error if LibC build is performed outside the test environment.

LibC is no longer required for production builds.

Use pre-built images from Docker Hub when the container definition has not changed. Downloading an image is quite a bit faster than building a new image from scratch and saves minutes per test run in CI.

Refactor the `common/log` tests to not depend on `common/harnessLog`. `common/harnessLog` was not ideally suited for general testing and made all the tests quite awkward. Instead, move all code used to test the `common/log` module into the `logTest` module and repurpose `common/harnessLog` to do log expect testing for all other tests in a cleaner way. Add a few exceptions for config testing since the log levels are reset by default in `config/parse`.

Add --log-level-test option. This allows setting the test log level independently from the general test harness setting, but current only works for the C tests. It is useful for seeing log output from functions on the console while a test is running.

Improve error reporting for `TEST_ASSIGN()` and `TEST_RESULT_VOID()` macros.

Update code count for new file types and exclusions.