Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
postgresql_backup_recovery_logical [2019/08/01 12:55] – [Restore] andonovj | postgresql_backup_recovery_logical [2021/06/24 09:51] (current) – andonovj | ||
---|---|---|---|
Line 1: | Line 1: | ||
=====Overview===== | =====Overview===== | ||
- | Logical backup refers to simple export of a data, achieved by the pg_dump. It is important to note that logical backup cannot be used in conjunction of XLOG or other incremental features, but it is very convenient for data migration. | + | Logical backup refers to simple export of a data, achieved by the pg_dump. |
+ | It is important to note that logical backup cannot be used in conjunction of XLOG or other incremental features, but it is very convenient for data migration. | ||
+ | =====Backup===== | ||
+ | Of course with logical backup we can backup: | ||
+ | |||
+ | * Entire Server | ||
+ | * Particular Database | ||
+ | * All roles and privileges | ||
+ | |||
+ | ====Globals==== | ||
+ | To be sure that there won't be any problems, we can dump all roles within the cluster as follows: | ||
+ | |||
+ | < | ||
+ | -bash-4.2$ pg_dumpall -p 5432 -v --roles-only -f "/ | ||
+ | ********************************************************** | ||
+ | </ | ||
+ | |||
+ | This will generates us a file called roles.sql in the mentioned directory which we can execute on the destination server. | ||
+ | if you want to generate a dump also for the tablespaces use the following: | ||
+ | |||
+ | < | ||
+ | -bash-4.2$ pg_dumpall -p 5432 -v --globals-only -f "/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====Particular Database==== | ||
Logical backup can also be configured in many ways, as simple as to dump a particular database in SQL script file. | Logical backup can also be configured in many ways, as simple as to dump a particular database in SQL script file. | ||
In nutshell there are two things which you should remember: | In nutshell there are two things which you should remember: | ||
Line 18: | Line 43: | ||
</ | </ | ||
- | Our backup will not be so much readable with text editors: | ||
<sxh bash> | <sxh bash> | ||
Line 57: | Line 81: | ||
</ | </ | ||
+ | ====Migrate tables between databases==== | ||
+ | We can migrate tables between databases, given the structure is already there: | ||
+ | < | ||
+ | pg_dump -Fc --data-only --table config --table config_properties wl_sportsbook | pg_restore --data-only -d wl_config | ||
+ | </ | ||
+ | ====Backup all roles and Users==== | ||
+ | To backup users and roles, we have to use a way similar to backing up the entire server, just we will backup only the globals as follows: | ||
+ | |||
+ | < | ||
+ | pg_dumpall -h localhost -p 5432 -v --globals-only > hunter_dev_globals.sql | ||
+ | </ | ||
+ | |||
+ | This way, it will be pure SQL and can be simply re-run on other server. | ||
=====Restore===== | =====Restore===== | ||
In terms of logical backup, restore and recovery are the same thing. It means, execute the script in order to REDO the changes. | In terms of logical backup, restore and recovery are the same thing. It means, execute the script in order to REDO the changes. | ||
- | Simple way will be just to execute the script as follows: | ||
- | |||
- | * Backup taken in plain SQL | ||
However BARE IN MIND ONE PROBLEM :) | However BARE IN MIND ONE PROBLEM :) | ||
- | Backup taken with: | + | |
- | pg_dump | + | * Backup taken with: **pg_dump: |
<sxh bash> | <sxh bash> | ||
Line 78: | Line 112: | ||
</ | </ | ||
- | * Backup taken with customer (-Fc) format | ||
- | If the pg_dump is used with pg_dump -Fc (customer) format. Then a pg_restore should be used: | + | * Backup taken with: **pg_dump -Fc: Restore with pg_restore** |
<sxh bash> | <sxh bash> | ||
+ | -bash-4.2$ pg_restore -d postgres -C -Fc hunter_dev_backup.sql <- pg_restore will connect to postgres DB, create hunter_dev and switch | ||
+ | -bash-4.2$ psql | ||
+ | psql (9.6.14) | ||
+ | Type " | ||
+ | postgres=# \l | ||
+ | List of databases | ||
+ | Name | ||
+ | vileges | ||
+ | -------------+-------------+----------+-------------+-------------+--------------- | ||
+ | ------------ | ||
+ | | ||
+ | </ | ||
+ | If you have many databases you can restore them via bash script. | ||
+ | |||
+ | <sxh bash> | ||
+ | #!/bin/bash | ||
+ | for database in `ls`; do | ||
+ | outfile=importAll.log | ||
+ | time=`date` | ||
+ | echo " | ||
+ | pg_restore -d postgres -C $database >> $import_$database.log | ||
+ | time=`date` | ||
+ | echo " | ||
+ | done | ||
</ | </ | ||
+ | The following script will restore all databases in the current directory. | ||
===== Appendix ===== | ===== Appendix ===== | ||
Line 136: | Line 194: | ||
backup_creati=`find $backup_file_today -maxdepth 1 -type f -print | wc -l` | backup_creati=`find $backup_file_today -maxdepth 1 -type f -print | wc -l` | ||
- | #Controllo che il numero di backup creati sia uguale al numero dei database | ||
if [ $numero_database == $backup_creati ] ; then | if [ $numero_database == $backup_creati ] ; then | ||
- | echo "PROCEDURA BACKUP TERMINATA SENZA ERRORI" >> $backup_file | + | echo "Backup procedure completed without error" >> $backup_file |
else | else | ||
- | echo "ERRORE NELLA PROCEDURA BACKUP" >> $backup_file | + | echo "Error during backup procedure execution" >> $backup_file |
fi | fi | ||
</ | </ | ||
Line 171: | Line 228: | ||
pg_restore (options) | pg_restore (options) | ||
- | -p, –port=PORT database server port number | + | -C, --create=Creates the database before restoring into it. With " |
- | -i, –ignore-version proceed even when server version mismatches | + | -p, --port=PORT database server port number |
- | -h, –host=HOSTNAME database server host or socket directory | + | -i, --ignore-version proceed even when server version mismatches |
- | -U, –username=NAME connect as specified database user | + | -h, --host=HOSTNAME database server host or socket directory |
- | -W, –password force password prompt (should happen automatically) | + | -U, --username=NAME connect as specified database user |
- | -d, –dbname=NAME connect to database name | + | -W, --password force password prompt (should happen automatically) |
- | -v, –verbose verbose mode | + | -d, --dbname=NAME connect to database name |
+ | -v, --verbose verbose mode | ||
</ | </ |