-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add support for importing an existing Postgres database
- Loading branch information
1 parent
f472c1b
commit 6d89319
Showing
5 changed files
with
85 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Importing an existing Postgres database from another installation (optional) | ||
|
||
Run this if you'd like to import your database from a previous installation of Matrix Synapse. | ||
(don't forget to import your `media_store` files as well - see [the restoring media store guide](restoring-media-store.md)). | ||
|
||
|
||
## Prerequisites | ||
|
||
For this to work, **the database name in Postgres must match** what this playbook uses. | ||
This playbook uses a Postgres database name of `homeserver` by default (controlled by the `matrix_postgres_db_name` variable). | ||
If your database name differs, be sure to change `matrix_postgres_db_name` to your desired name and to re-run the playbook before proceeding. | ||
|
||
The playbook supports importing Postgres dump files in **text** (e.g. `pg_dump > dump.sql`) or **gzipped** formats (e.g. `pg_dump | gzip -c > dump.sql.gz`). | ||
|
||
Before doing the actual import, **you need to upload your Postgres dump file to the server**. | ||
|
||
|
||
## Importing | ||
|
||
To import, run this command (make sure to replace `<server-path-to-postgres-dump.sql>` with a file path on your server): | ||
|
||
ansible-playbook -i inventory/hosts setup.yml --extra-vars='server_path_postgres_dump=<server-path-to-postgres-dump.sql>' --tags=import-postgres | ||
|
||
**Note**: `<server-path-to-postgres-dump.sql>` must be a file path to a Postgres dump file on the server (not on your local machine!). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
--- | ||
|
||
# Pre-checks | ||
|
||
- name: Fail if playbook called incorrectly | ||
fail: msg="The `server_path_postgres_dump` variable needs to be provided to this playbook, via --extra-vars" | ||
when: "server_path_postgres_dump is not defined or server_path_postgres_dump.startswith('<')" | ||
|
||
- name: Check if the provided Postgres dump file exists | ||
stat: path="{{ server_path_postgres_dump }}" | ||
register: result_server_path_postgres_dump_stat | ||
|
||
- name: Fail if provided Postgres dump file doesn't exists | ||
fail: msg="File cannot be found on the local machine at {{ server_path_postgres_dump }}" | ||
when: not result_server_path_postgres_dump_stat.stat.exists | ||
|
||
- include: tasks/util/detect_existing_postgres_version.yml | ||
|
||
- name: Abort, if no existing Postgres version detected | ||
fail: msg="Could not find existing Postgres installation" | ||
when: "not matrix_postgres_detected_existing" | ||
|
||
|
||
# Defaults | ||
|
||
- name: Set postgres_start_wait_time, if not provided | ||
set_fact: | ||
postgres_start_wait_time: 15 | ||
when: "postgres_start_wait_time|default('') == ''" | ||
|
||
|
||
# Actual import work | ||
|
||
- name: Ensure matrix-postgres is started | ||
service: name=matrix-postgres state=started daemon_reload=yes | ||
|
||
- name: Wait a bit, so that Postgres can start | ||
wait_for: | ||
timeout: "{{ postgres_start_wait_time }}" | ||
delegate_to: 127.0.0.1 | ||
become: false | ||
|
||
- name: Perform Postgres database import | ||
command: | | ||
/usr/bin/docker run --rm --name matrix-postgres-import \ | ||
--network={{ matrix_docker_network }} \ | ||
--env-file={{ matrix_environment_variables_data_path }}/env-postgres-pgsql-docker \ | ||
-v {{ server_path_postgres_dump }}:{{ server_path_postgres_dump }}:ro \ | ||
--entrypoint=/bin/sh | ||
{{ matrix_postgres_docker_image_latest }} | ||
-c 'cat {{ server_path_postgres_dump }} | \ | ||
{{ 'gunzip |' if server_path_postgres_dump.endswith('.gz') else '' }} | ||
psql -v ON_ERROR_STOP=1 -h matrix-postgres' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters