Главная Новости

Backup restore postgresql базы данных с pg_dump


Опубликовано: 01.09.2018

видео Backup restore postgresql базы данных с pg_dump

Backup базы Postgres

pg_dump - это утилита позволяющая делать бэкап базы данных из postgresql. Она сохраняет в файл набор SQL команд которые полностью воссоздают структуру исходной базы данных. Для последующего восстановления из подобного файла достаточно psql которая почти всегда идет в комплекте с самим postgresql.



С помощью pg_dump , вы можете сделать бэкап базы данных в текущий момент времени, и в дальнейшнейм развернуть его без каких либо проблем. Для тех, кто раньше работал с mysql, pg_dump может показаться весьма знакомым. С mysql в поставке идет аналогичная утилита под названием mysqldump.

В этой небольшой статье мы рассмотрим несколько полезных примеров использования pg_dump.


Восстановление из архива базы PostgreSQL

Резервное копирование базы данных

Бэкап одной базы данных

В примере ниже, мы сделаем резервную копию базы данных под названием thebosharu, принадлежащей пользователю bosha и сохраним её в файл thebosharu.sql:

pg_dump -U bosha thebosharu -f thebosharu.sql

Если вы работаете с базой данных не под тем же пользователем, под которым работаете в системе, то pg_dump спросит пароль к базе данных и после его успешного ввода создаст указанный файл содержащий SQL команды для создания необходимой структуры и копирования данных.


How to import database postgreSQL

Вот часть дампа моей базы данных, чтобы вы понимали что в нем находится:

-- -- Name: auth_user; Type: TABLE; Schema: public; Owner: bosha; Tablespace: -- CREATE TABLE auth_user ( id integer NOT NULL , username character varying ( 250 ) NOT NULL , password character varying ( 250 ), email character varying ( 250 ), first_name character varying ( 250 ), last_name character varying ( 250 ), middle_name character varying ( 250 ), authenticated boolean , active boolean , is_admin boolean ); ALTER TABLE auth_user OWNER TO bosha ; -- -- Name: auth_user_id_seq; Type: SEQUENCE; Schema: public; Owner: bosha -- CREATE SEQUENCE auth_user_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 ; ALTER TABLE auth_user_id_seq OWNER TO bosha ; -- -- Name: auth_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: bosha -- ALTER SEQUENCE auth_user_id_seq OWNED BY auth_user . id ; -- -- Data for Name: auth_user; Type: TABLE DATA; Schema: public; Owner: bosha -- COPY auth_user ( id , username , password , email , first_name , last_name , middle_name , authenticated , active , is_admin ) FROM stdin ; 1 test pbkdf2 : sha1 : $ sfadfadafda$sfadfadf10019sdfadfad0101010dsfadf0202022 \ N f f f \ .

Так же можно передать ключ --format=t, чтобы pg_dump запаковал базу данных в tar:

pg_dump -U bosha thebosharu --format=t -f thebosharu.sql.tar

Бэкап всех баз данных

Для того, чтобы сделать резервную копию всех баз данных, нужно использовать другую утилиту - pg_dumpall .

Права доступа могут быть настроены у всех по разному, поэтому бэкап всех баз данных лучше делать из под пользователя postgres.

Зайдем под ним:

И выполним:

pg_dumpall > all_databases.sql

Бэкап всех баз данных будет содержаться в файле all_databases.sql.

Крайне желательно убедится, что все нужные базы данных были копированы. Для этого все из под того же пользователя postgres посмотрим список всех баз данных:

В моем случае было три базы данных:

postgres : ~ $ psql - l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ---------------+----------+----------+-------------+-------------+--------------------------- thebosharu | postgres | UTF8 | ru_RU . UTF - 8 | ru_RU . UTF - 8 | = Tc / postgres + | | | | | postgres = CTc / postgres + | | | | | thebosharu = CTc / postgres testdb1 | postgres | UTF8 | ru_RU . UTF - 8 | ru_RU . UTF - 8 | = Tc / postgres + | | | | | postgres = CTc / postgres + | | | | | testdb1 = CTc / postgres testdb2 | postgres | UTF8 | ru_RU . UTF - 8 | ru_RU . UTF - 8 | = Tc / postgres + | | | | | postgres = CTc / postgres + | | | | | testdb2 = CTc / postgres ( 3 rows )

Теперь удостоверимся, что все перечисленные базы попали в дамп:

bash:~$ grep "^[\]connect" all.sql \connect thebosharu \connect testdb1 \connect testdb2

Бэкап определенной таблицы

pg_dump --table auth_user -U bosha thebosharu -f auth_user_table.sql

Для бэкапа определенной таблицы используется параметр --table и следом за ним названием таблицы. Если в базе данных указанная таблица есть в разных схемах, то её можно указать используя параметр --schema.

Восстановление из бэкапа

Восстановление одной базы данных

psql -U bosha -d thebosharu -f thebosharu.sql

В процессе восстановления из резервной копии, могут возникнуть ошибки и предупреждения. Их можно игнорировать:

psql : mydb . sql : 49 : ERROR : must be owner of schema public psql : mydb . sql : 89 : ERROR : must be member of role "bosha" psql : mydb . sql : 159 : WARNING : no privileges could be revoked psql : mydb . sql : 261 : WARNING : no privileges could be revoked psql : mydb . sql : 381 : WARNING : no privileges were granted psql : mydb . sql : 452 : WARNING : no privileges were granted

Восстановление из бэкапа всех баз данных

su - postgres psql -f all_databases.sql

Восстановление одной таблицы

psql -f auth_user_table.sql thebosharu
rss