gpbackup and gprestore are Go utilities for performing Greenplum Database backups. They are still currently in active development.
The project requires the Go Programming language version 1.8 or higher. Follow the directions here for installation, usage and configuration instructions.
go get github.com/greenplum-db/gpbackup/...This will place the code in $GOPATH/github.com/greenplum-db/gpbackup.
Make the gpbackup directory your current working directory and run:
make depend
make buildThe build target will put the gpbackup and gprestore binaries in $HOME/go/bin.
This will also attempt to copy gpbackup_helper to the greenplum segments (retrieving hostnames from gp_segment_configuration). Pay attention to the output as it will indicate whether this operation was successful.
make build_linux and make build_mac are for cross compiling between macOS and Linux
make install_helper will scp the gpbackup_helper binary (used with -single-data-file flag) to all hosts
Required for Greenplum Database 6 or higher, several tests require the dummy_seclabel Greenplum contrib module. This module exists only to support regression testing of the SECURITY LABEL statement. It is not intended to be used in production. Use the following commands to install the module.
pushd ~/workspace/gpdb/contrib/dummy_seclabel
make install
gpconfig -c shared_preload_libraries -v dummy_seclabel
gpstop -ra
gpconfig -s shared_preload_libraries | grep dummy_seclabel
popd
NOTE: The integration and end_to_end tests require a running Greenplum Database instance.
To run all tests except end-to-end (linters, unit, and integration), use
make testTo run only unit tests, use
make unitTo run only integration tests (requires a running GPDB instance), use
make integrationTo run end to end tests (requires a running GPDB instance), use
make end_to_endWe provide the following targets to help developers ensure their code fits Go standard formatting guidelines.
To run a linting tool that checks for basic coding errors, use
make lintThis target runs gometalinter.
Note: The lint target will fail if code is not formatted properly.
To automatically format your code and add/remove imports, use
make formatThis target runs goimports and gofmt.
We will only accept code that has been formatted using this target or an equivalent gofmt call.
The basic command for gpbackup is
gpbackup --dbname <your_db_name>The basic command for gprestore is
gprestore --timestamp <YYYYMMDDHHMMSS>Run --help with either command for a complete list of options.
To remove the compiled binaries and other generated files, run
make cleanThe Greenplum Backup wiki for this project has several articles providing a more in-depth explanation of certain aspects of gpbackup and gprestore.
We accept contributions via Github Pull requests only.
Follow the steps below to contribute to gpbackup:
- Fork the project’s repository.
- Run
go get github.com/greenplum-db/gpbackup/...and add your fork as a remote. - Run
make dependto install required dependencies - Create your own feature branch (e.g.
git checkout -b gpbackup_branch) and make changes on this branch. - Run
make format,make test, andmake end_to_endin your feature branch and ensure they are successful. - Push your local branch to the fork (e.g.
git push <your_fork> gpbackup_branch) and submit a pull request.
Your contribution will be analyzed for product fit and engineering quality prior to merging. Note: All contributions must be sent using GitHub Pull Requests.
Your pull request is much more likely to be accepted if it is small and focused with a clear message that conveys the intent of your change.
Overall we follow GPDB's comprehensive contribution policy. Please refer to it here for details.
If you see errors in many integration tests (below), review the Validation and code quality [Test setup](#Test setup) section above:
SECURITY LABEL FOR dummy ON TYPE public.testtype IS 'unclassified';
Expected
<pgx.PgError>: {
Severity: "ERROR",
Code: "22023",
Message: "security label provider \"dummy\" is not loaded",
If you see errors indicating the test_tablespace tablespace already
exists (below), execute psql postgres -c 'DROP TABLESPACE test_tablespace' to cleanup the environment and rerun the tests.
CREATE TABLESPACE test_tablespace LOCATION '/tmp/test_dir'
Expected
<pgx.PgError>: {
Severity: "ERROR",
Code: "42710",
Message: "tablespace \"test_tablespace\" already exists",