Ошибка входной файл видимо имеет текстовый формат загрузите его с помощью psql

Обновлено: 07.07.2024

У меня есть схема базы данных с именем: nyummy и таблица с именем cimory : create table nyummy.cimory ( id numeric(10,0) not null, name character varying(60) not null, city character varying(50) no.

В моей базе данных Postgresql я создал таблицу NAV_DATA с пятью столбцами: id (PKEY) ,name (VARCHAR) ,call_type (VARCHAR) ,date_created (date) Для этих столбцов У меня есть файл CSV, который раздел.

Я использую psql с базой данных PostgreSQL и следующей командой copy : \COPY isa (np1, np2, sentence) FROM 'c:\Downloads\isa.txt' WITH DELIMITER '|' Я получаю: ERROR: extra data after last expected.

Мне нужно загрузить данные из некоторых источников исходных данных в базу данных Postgres. Для выполнения этой задачи я сначала записываю данные во временный файл CSV, а затем загружаю данные из фа.

Я на windows 7 64 бит. У меня есть файл csv 'data.csv'. Я хочу импортировать данные в таблицу postgresql "temp_unicommerce_status" через python script. Мой Script: import psycopg2 conn = psycopg2.c.

Я использую COPY table_name FROM STDIN для импорта данных. Это очень эффективно, но если есть какие-либо нарушения дублирования ключей, вся процедура будет остановлена. Есть ли вообще все вокруг? п.

Каков самый простой способ сохранить вывод PL/pgSQL из базы данных PostgreSQL в файл CSV? Я использую PostgreSQL 8.4 с плагинами pgAdmin III и PSQL, из которых я запускаю запросы.

Я импортирую данные из файла в таблицу базы данных PostgreSQL, используя COPY FROM . Некоторые из строк в моем файле содержат шестнадцатеричные символы (в основном \x0d и\x0a), и я хотел бы, чтобы .

У меня есть функция postgresql, которая создает CSV файл, как показано ниже. CREATE FUNCTION public.exportsnapshot() RETURNS void AS $$ LANGUAGE 'plpgsql' BEGIN COPY (my_query) TO 'tmp/test.csv' Wi.

Используя инструкцию COPY PostgreSQL, мы можем загружать данные из текстового файла в таблицу базы данных, как показано ниже: COPY CME_ERROR_CODES FROM E'C:\\Program Files\\ERROR_CODES\\errcodes.tx.

Я пытаюсь экспортировать из большой таблицы postgres 8.1 несколько строк, используя copy (select * from tablename limit 100) to 'absolute path to file'; но я получаю ERROR: syntax error at or near .

Возможный дубликат: для COPY в postgresql INSERT INTO contacts_lists (contact_id, list_id) SELECT contact_id, 67544 FROM plain_contacts WHERE TRUE AND is_print = T

Я хотел бы kommunekode таблицу в базе данных PostgreSQL, использовать переменную kommunekode в качестве параметра и вывести ее в CSV. Тем не менее, я не могу заставить копию работать. Я не являюсь .

Я хотел бы использовать функцию COPY в PostgreSQL для импорта CSV файла в базу данных PostgreSQL. Где указано имя файла в документации , файл CSV должен храниться в определенном месте или может быт.

Я работал над Express-приложением, которое имеет форму, предназначенную для хранения строк и котировок. Некоторые из строк будут иметь одинарные кавычки ( ' ), но в целом он способен хранить информ.

Возможно ли, чтобы в Postgres 9.6 появилась on duplicate key функция UPSERT с помощью команды COPY ? У меня есть файл CSV, который я импортирую в Postgres, но он может содержать некоторые дубликаты.

Сегодня я потратил свой день на улучшение производительности моего Python script, который подталкивает данные в мою базу данных Postgres. Я ранее вставлял записи как таковые: query tag-list"> postgresql-copy sql-insert postgresql python

Я использую следующий код: query1=" SELECT distinct copy meta.amz_payment1(\"Date\", settlement_id, type, order_id, " + "sku, description, quantity, marketplace, fulfillment, order_city, order_stat.

Столбцы таблицы: col1, col2, col3, fname, lname CSV файл содержит такие значения, как: col1,col2,col3 val1,val2,val3 val1,val2,val3 Я хочу добавить данные из csv вместе с дополнительными данными, т.

Мне нужно скопировать данные таблицы в текстовый файл в Windows в формате csv. Как это сделать? То, что я пробовал: COPY test TO '"E:\\test.csv"' DELIMITER ',' CSV HEADER; При выполнении этого запр.

Я использую pgAdmin версии 4.3, и я хочу экспортировать данные одной таблицы в файл CSV. Я использовал этот запрос COPY (select * from product_template) TO 'D:\Product_template_Output.csv' DELIMITE.

Я создаю программу на Java для чтения файла Excel, удаляю некоторые плохие строки, создаю из него CSV файл и вставляю его в базу данных PostgreSQL с помощью синтаксиса COPY. В настоящее время он ра.

Я пытаюсь импортировать файл txt/csv в мою базу данных postgres из php, используя команду "\ copy". Я не могу использовать COPY вместо \copy, поскольку мне нужно, чтобы он выполнялся как клиент psq.

Я создаю таблицу, которая будет заполнена COPY . Вот формат этих данных: 6/30/2014 2:33:00 PM MM-DD-YYYY HH:MM:SS ?? Что я буду использовать в качестве форматирования для инструкции CREATE TABLE ? .

Я пытаюсь загрузить таблицу из txt файла с китайскими символами, используя команду \copy в PostgreSQL. У меня есть тестовая таблица с одним столбцом Names Varchar (25). Когда я запускаю инструкцию .

Я использую Python 2.7 и psycopg2 для подключения к моему серверу БД (PostgreSQL 9.3), и я список объектов (Класс продукта) содержит элементы, которые я хочу вставить products_list = [] products_li.

У меня есть файл university.txt, который выглядит так: Alabama Air University Alabama A&M University Alabama State University Concordia College-Selma Faulkner University Huntingdon College Jack.

У меня есть набор данных в CSV файле, состоящем из 2500 строк. Файл структурирован таким образом (упрощенным) способом: id_run; run_name; receptor1; receptor2; receptor3_value; [. ]; receptor50_va.

Я импортирую CSV-список городов в свое приложение Django. Я новичок в Django и Python, и импорт выполняется достаточно быстро, первые 25 000 строк занимают около 5 минут, а следующие 25 000 - 2 час.

Я новичок в управлении базами данных, и мы используем psql. Все, что мне нужно сделать, это перенести csv (около 200 таблиц) в нашу базу данных. Ручное создание таблиц для каждого файла csv немного.

У меня есть следующий контент в моем файле csv (с 3 столбцами): 141413,"\"'/x=/></script></title><x><x/","Mountain View, CA\"'/x=/></script></title><x>&.

У меня есть экземпляр Cloud SQL с PostgreSQL и файл .csv на моем локальном компьютере. Я создал пользователя и базу данных. Я вошел в систему как этот пользователь с этой базой данных и создал табл.

Невозможно использовать команду копирования с помощью jdbc Postgres. Что не так с приведенным ниже фрагментом кода. public boolean loadReportToDB(String date) < // TODO Auto-generated method stub C.

Я должен читать CSV каждые 20 секунд. Каждый CSV содержит мин. от 500 до макс. 60000 линий. Мне нужно вставить данные в таблицу Postgres, но перед этим мне нужно проверить, были ли элементы уже вст.

У меня есть файл csv с двумя столбцами: productId , productName . Моя таблица имеет следующие столбцы: productId , productName , productprice . Я хочу, чтобы иметь возможность скопировать этот файл.

У меня есть текстовый файл, содержащий номера строк строк, которые должны быть удалены в моей таблице следующим образом: 3 32 40 55 [. ] Как я могу получить инструкцию SQL, совместимую с PostgreSQ.

моя команда \copy meta.amz_payment1("Date", settlement_id, type, order_id, sku, description, quantity, marketplace, fulfillment, order_city, order_state, order_postal, product_sales, shipping_credi.

У меня есть запрос, написанный в файле, расположенном в /path/to/query. Как сохранить результат вывода в файл csv, не используя COPY в запросе? Я попробовал следующую команду, но поля выходных файл.

Я пытаюсь экспортировать некоторые агрегированные данные в CSV файл. Я хочу использовать команду COPY postgresql, как в приведенном ниже коде, но я получаю данные из команды EXECUTE, которая будет .

Рубрики

А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!

В данной инструкции рассмотрены варианты создания резервных копий и восстановления баз СУБД PostgreSQL.

Все команды, которые приводятся ниже, должны выполняться из командной строки. В Linux — это окно терминала, в Windows — командная строка (cmd.exe) с переходом в папку установки PostgreSQL.

Создание резервных копий

Базовая команда

pg_dump <параметры> <имя базы> > <файл, куда сохранить дамп>

pg_dump users > /tmp/users.dump

Пользователь и пароль

Если резервная копия выполняется не от учетной записи postgres, необходимо добавить опцию -U с указанием пользователя:

pg_dump -U dmosk -W users > /tmp/users.dump

* где dmosk — имя учетной записи; опция W потребует ввода пароля.

Сжатие данных

Для экономии дискового пространства или более быстрой передачи по сети можно сжать наш архив:

pg_dump users | gzip > users.dump.gz

Скрипт для автоматического резервного копирования

Рассмотрим 2 варианта написания скрипта для резервирования баз PostgreSQL. Первый вариант — запуск скрипта от пользователя root для резервирования одной базы. Второй — запуск от пользователя postgres для резервирования всех баз, созданных в СУБД.

Для начала, создадим каталог, в котором разместим скрипт, например:

Вариант 1. Запуск от пользователя root; одна база.

PGPASSWORD=password
export PGPASSWORD
pathB=/backup
dbUser=dbuser
database=db

find $pathB \( -name "*-1[^5].*" -o -name "*-[023]?.*" \) -ctime +61 -delete
pg_dump -U $dbUser $database | gzip > $pathB/pgsql_$(date "+%Y-%m-%d").sql.gz

* где password — пароль для подключения к postgresql; /backup — каталог, в котором будут храниться резервные копии; dbuser — имя учетной записи для подключения к БУБД; pathB — путь до каталога, где будут храниться резервные копии.
* данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После при помощи утилиты pg_dump будет выполнено подключение и резервирование базы db. Пароль экспортируется в системную переменную на момент выполнения задачи.

Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:

3 0 * * * /scripts/postgresql_dump.sh

* наш скрипт будет запускаться каждый день в 03:00.

Вариант 2. Запуск от пользователя postgres; все базы.

find $pathB \( -name "*-1[^5].*" -o -name "*-[023]?.*" \) -ctime +61 -delete

* где /backup — каталог, в котором будут храниться резервные копии; pathB — путь до каталога, где будут храниться резервные копии.
* данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После найдет все созданные в СУБД базы, кроме служебных и при помощи утилиты pg_dump будет выполнено резервирование каждой найденной базы. Пароль нам не нужен, так как по умолчанию, пользователь postgres имеет возможность подключаться к базе без пароля.

Необходимо убедиться, что у пользователя postgre будет разрешение на запись в каталог назначения, в нашем примере, /backup/postgres.

Зададим в качестве владельца файла, пользователя postgres:

chown postgres:postgres /scripts/postgresql_dump.sh

Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:

crontab -e -u postgres

* мы откроем на редактирование cron для пользователя postgres.

3 0 * * * /scripts/postgresql_dump.sh

* наш скрипт будет запускаться каждый день в 03:00.

Права и запуск

Разрешаем запуск скрипта, как исполняемого файла:

chmod +x /scripts/postgresql_dump.sh

Единоразово можно запустить задание на выполнение резервной копии:

. или от пользователя postgres:

su - postgres -c "/scripts/postgresql_dump.sh"

На удаленном сервере

Если сервер баз данных находится на другом сервере, просто добавляем опцию -h:

pg_dump -h 192.168.0.15 users > /tmp/users.dump

* необходимо убедиться, что сама СУБД разрешает удаленное подключение. Подробнее читайте инструкцию Как настроить удаленное подключение к PostgreSQL.

Дамп определенной таблицы

Запускается с опцией -t <table> или --table=<table>:

pg_dump -t students users > /tmp/students.dump

* где students — таблица; users — база данных.

Размещение каждой таблицы в отдельный файл

Также называется резервированием в каталог. Данный способ удобен при больших размерах базы или необходимости восстанавливать отдельные таблицы. Выполняется с ипользованием ключа -d:

pg_dump -d customers > /tmp/folder

* где /tmp/folder — путь до каталога, в котором разместяться файлы дампа для каждой таблицы.

Только схемы (структуры)

Для резервного копирования без данных (только таблицы и их структуры):

pg_dump --schema-only users > /tmp/users.schema.dump

Также, внутри каждой базы могут быть свои схемы с данными. Если нам нужно сделать дамп именно той схемы, которая внутри базы, используем ключ -n:

pg_dump --schema-only users -n production > /tmp/users.schema_production.dump

* в данном примере мы создадим дамп структуры базы данных users только для схемы production.

Или полный дамп с данными для схемы внутри базы данных:

pg_dump users -n production > /tmp/users.production.dump

Только данные

pg_dump --data-only users > /tmp/users.data.dump

Использование pgAdmin

Данный метод хорошо подойдет для компьютеров с Windows и для быстрого создания резервных копий из графического интерфейса.

Запускаем pgAdmin - подключаемся к серверу - кликаем правой кнопкой мыши по базе, для которой хотим сделать дамп - выбираем Резервная копия:

Выбираем операцию резервного копирования для базы Postgresql

В открывшемся окне выбираем путь для сохранения данных и настраиваемый формат:

Настраиваем путь для резервного копирования

При желании, можно изучить дополнительные параметры для резервного копирования:

Дополнительные опции

После нажимаем Резервная копия - ждем окончания процесса и кликаем по Завершено.

Не текстовые форматы дампа

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

Алгоритм резервного копирования баз 1С: 8 средствами PostgreSQL.

(1) lustin,
Зачем так сложно ?
cmd - файл в задания под какой нибуть локальной админской записью.

Текстовые файлы, созданные pg_dump предназначаются для последующего чтения программой psql. Общий вид команды для восстановления дампа:

psql имя_БД < файл_дампа

где файл_дампа — это файл, содержащий вывод команды pg_dump. База данных, заданная параметром имя_БД не будет создана данной командой , так что вы должны создать её сами из базы template0 перед запуском psql (например, с помощью команды createdb -T template0 имя_БД)

Ещё следует уточнить что кодировка дампа должна совпадать с кодировкой сервера БД.

PostgreSQL не восстанавливает текущую базу из дампа.
Поэтому, я восстанавливаю базу так:
dropdb имя_базы
createdb имя_базы
psql имя_базы < файл_дампа

Мой скрипт восстановления для Linux (работает под пользователем postgres):

if [ -z "$1" ] ; then
echo "Скрипт восстановления базы 1С. Параметры: 1 имя директории бэкапа, 2 имя базы 1С" 1>&2
exit
fi

dropdb $base_name
createdb $base_name
gunzip -c $archive_name | psql $base_name

У нас с восстановлением базы из дампа проблем вроде не вылезает, не ругается:
dropdb -U postgres [имя базы]
createdb -U postgres [имя базы]
pg_restore -U postgres -d [имя базы] [имя файла] Для разграничения архивов по дням: namebase_backup_%date:

Если у пользователя установлен пароль: SET PGPASSWORD=123

"C:\Program Files\PostgreSQL\9.4.2-1.1C\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "D:\1cBackupNew\ut11_backup_%date:

(7) Можно ли этим способом делать бэкап базы не выгоняя пользователей из базы? pg_dump — это программа для создания резервных копий базы данных Postgres Pro. Она создаёт целостные копии, даже если база параллельно используется. Программа pg_dump не препятствует доступу других пользователей к базе данных (ни для чтения, ни для записи).
Нет, нельзя. Одна операция в 1с меняет данные во многих sql таблицах. Бэкап базы существеннен по времени и у вас нет гарантии, что данные за это время не изменятся. Вы сделаете несколько бэкапов и они будут рабочие, но однажды попадете на восстановление данных. (14) Не вводите людей в заблуждение.
Не только можно, но и в большинстве случаев это единственный вариант. Например если база весит пару терабайт, работает 24/7/365 и каждый час простоя стоит N килобаксов.
А по поводу длительности операции - там снэпшот создается, так что итоговый бэкап получается вполне себе консистентным.
Не знаю как насчет терабайт, а вот с базой 300Гб (select pg_database_size('base');), которая используется 24/7/365, я сначала был такого же мнения как и вы. Бэкап делался минут 40, в течении которых пользователи плевались и матерились, т.к. предприятие тормозило еще как. Так вот в один прекрасный день, когда неудачно прошло обновление конфигурации и база отказалась запускаться, пришлось воспользоваться самым свежим бэкапом, сделанным таким путем, и каково же было мое недоумение, когда он загрузился без проблем, но при открытии в 1с счет фактур предприятие вылетало. Вы можете возразить, что мол кеши надо было чистить, но все это конечно было сделано. Сейчас система переделана. Два сервера: один мастер, другой слейв. Когда нужно сделать бэкап, слейв теряет соединение с мастером, к нему подключается сервер 1с предприятия и средствами 1с делают бэкап. После этого слейв подключается к мастеру и синхронизируется.
Снепшот может и создается (хотя не уверен, а проверять ваши слова лень), но это снепшот sql базы. А вот 1с в этот момент может что-то активно писать и поменять данные в 1 таблице sql, и тут произойдет снепшот sql, а еще в 10 таблицах не успеет поменять, хотя должна, чтобы поддерживать свою логику. Вы же знаете, что одно добавление в регистр записи, может запускать множество других регистраций и каждая из них будет запускаться как одна транзакция в sql. Поэтому данные в базе у вас обязательно испортятся. Возможно база у вас и загрузится и даже работать будет, но данные будут неполными и это аукнется позже. (16), А есть уверенность, что в момент потери связи между серверами 1С были записаны все необходимые движения? Вы считаете что все движения, связанные с проведением документа в 1С происходят в одной 1С транзакции? А есть уверенность, что в момент потери связи между серверами 1С были записаны все необходимые движения?
Я говорил про сервера postgresql, а не 1с. Уверенности конечно нет, но т.к. бэкап делается средствами 1с, то 1с при обнаружении испорченных данных в документе его просто не выгрузит в бэкап. В результате структура базы будет цела, правда за минусом документа.
Ага, не понял вас сразу. То есть фактически плюсом этого решения является то, что боевая база не тормозит в момент бэкапа? Но вот в плане надёжности такого решения я испытываю сильные сомнения. В момент обрыва связи между серверами postgre вероятность потерять данные не меньше чем при снепшоте. То что потом бэкап делается средствами 1С не панацея. Сталкивался я со случаями, когда бэкап из dt не разворачивался из-за сбойных данных внутри.
Добрый день,
Выполнял выше указанные скрипты. Дамп отрабатывает без ошибок, но при попытки сделать восстановление в пустую созданную БД отрабатывает не корректно с ошибками, база не запускается. Так же создаю резервные копии как писали в коментах.
Но есть один вопрос. Иногда требуется срочно восстановить какую нибудь копию базы за определенный день. с командной строки я ее восстанавливаю в новую базу созданную посредством psql, но в 1ске то она не появиться надо вручную ее создать или с помощью 1с или через консоль администрирования 1с. А как через командную строку создать базу в 1с?

Хотелось бы рассказать про еще один "чудесный" способ передачи файла с дампом базы от облачного хостера 1С сервера. Возможно это сможет кому-то съэкономить часов 5 драгоценного времени, особенно для таких как я, которые за 15 лет работы с 1С - за ненадобностью postgre в глаза не видели, да и с линуксообразными тоже не особо.

Резервное копирование и восстановление PostgreSQL: pg_dump, pg_restore, wal-g

Задача резервного копирования — одна из основных при сопровождении и поддержке PostgreSQL. Для резервного копирования логической схемы и данных можно использовать как встроенные инструменты СУБД, так и внешние. В этой статье мы разберем оба варианта.


В статье будем использовать виртуальный сервер с конфигурацией 2 vCPU, 4 ГБ RAM и 10 ГБ HDD с операционной системой CentOS 8 64-bit.


Теперь прокрутим представление ниже, где находятся настройки сети. Важно, чтобы у сервера был внешний плавающий IP-адрес для доступа извне.


После выбора операционной системы, конфигурации сервера и выполнения сетевых настроек переходим к завершению заказа и нажимаем на кнопку Создать. Через несколько минут сервер будет готов.

Перед началом демонстрации возможностей резервного копирования, мы подготовили PostgreSQL. Для целей наполнения базы данных и создания непрерывного потока записи, развернули там Zabbix (некоторое время назад публиковали о нем статью).

Создание резервных копий и восстановление из командной строки

В этом разделе мы расскажем как сделать дамп базы данных PostgreSQL в консоли при подключении по SSH, разберем синтаксис и покажем примеры использования утилит pg_dump, pg_dumpall, pg_restore, pg_basebackup и wal-g.

Утилита pg_dump

В PostgreSQL есть встроенный инструмент для создания резервных копий — утилита pg_dump. Утилита имеет простой синтаксис:

В простейшем случае достаточно указать имя базы данных, которую в дальнейшем нужно будет восстановить. Резервная копия создается следующей командой:

Если требуется авторизация под определенным пользователем, можно воспользоваться ключом -U:

Ключ -U определяет пользователя, а -W обязывает ввести пароль.

Чтобы сэкономить место на диске, можно сразу же сжимать дамп:

Резервное копирование обычно выполняется по расписанию, например, ежедневно в 3 часа ночи. Нижеприведенный пример скрипта не только выполняет бэкап, но и удаляет все файлы старше 61 дня (за исключением 15-го числа месяца).

Чтобы настроить регулярное выполнение, выполним следующую команду в планировщике crontab:

Чтобы выполнить аналогичную команду на удаленном сервере, достаточно добавить ключ -h:

Ключ -t задает таблицу, для которой нужно создать резервную копию:

При помощи специальных ключей можно создавать резервные копии структуры данных или непосредственно данных:

У утилиты pg_dump также есть ключи для сохранения дампа в другие форматы. Чтобы сохранить копию в виде бинарного файла используются ключи -Fc:

Чтобы создать архив — -Ft:

Чтобы сохранить в directory-формате — -Fd:

Резервное копирование в виде каталогов позволяет выполнять процесс в многопоточном режиме.

Ниже мы перечислим возможные параметры утилиты pg_dump.

  • p, plain) — формирует текстовый SQL-скрипт;
  • c, custom) — формирует резервную копию в архивном формате;
  • d, directory) — формирует копию в directory-формате;
  • t, tar) — формирует копию в формате tar.

Утилита pg_dumpall

Утилита pg_dumpall реализует резервное копирование всего экземпляра (кластера или инстанса) базы данных без указания конкретной базы данных на инстансе. По принципу схожа с pg_dump. Добавим, что только утилиты pg_dump и pg_dumpall предоставляют возможность создания логической копии данных, остальные утилиты, рассматриваемые в этой статье, позволяют создавать только бинарные копии.

Чтобы сразу сжать резервную копию экземпляра базы данных, нужно передать вывод на архиватор gzip:

Ниже приведены параметры, с которыми может вызываться утилита pg_dumpall.

Утилита pg_restore

Утилита позволяет восстанавливать данные из резервных копий. Например, чтобы восстановить только определенную БД (в нашем примере zabbix), нужно запустить эту утилиту с параметром -d:

Чтобы этой же утилитой восстановить определенную таблицу, нужно использовать ее с параметром -t:

Также утилитой pg_restore можно восстановить данные из бинарного или архивного файла. Соответственно:

При восстановлении можно одновременно создать новую базу:

Восстановить данные из дампа также возможно при помощи psql:

Если для подключения нужно авторизоваться, вводим следующую команду:

Ниже приведен синтаксис утилиты pg_restore.

<имя_файла> — расположение восстанавливаемых данных.

  • p, plain — формирует текстовый SQL-скрипт;
  • c, custom — формирует резервную копию в архивном формате;
  • d, directory — формирует копию в directory-формате;
  • t, tar — формирует копию в формате tar.

Утилита pg_basebackup

Утилитой pg_basebackup можно выполнять резервное копирования работающего кластера баз данных PostgreSQL. Результирующий бинарный файл можно использовать для репликации или восстановления на определенный момент в прошлом. Утилита создает резервную копию всего экземпляра базы данных и не дает возможности создавать слепки данных отдельных сущностей. Подключение pg_basebackup к PostgreSQL выполняется при помощи протокола репликации с полномочиями суперпользователя или с правом REPLICATION.

Для выполнения резервного копирования локальной базы данных достаточно передать утилите pg_basebackup параметр -D, обозначающий директорию, в которой будет сохранена резервная копия:

Чтобы создать сжатые файлы из табличных пространств, добавим параметры -Ft и -z:

То же самое, но со сжатием bzip2 и для экземпляра базы с общим табличным пространством:

Ниже приведен синтаксис утилиты pg_basebackup.

  • p, plain — значение для записи выводимых данных в текстовые файлы;
  • t, tar — значение, указывающее на необходимость записи в целевую директорию в формате tar.
  • f, fetch — включение режима сбора файлов журналов транзакций при окончании процесса копирования;
  • s, stream — включение передачи журнала транзакций в процессе создания резервной копии.

Утилита wal-g

Wal-g — утилита для резервного копирования и восстановления базы данных PostgreSQL. При помощи wal-g можно выполнять сохранение резервных копий на хранилищах S3 или просто на файловой системе. Ниже мы разберем установку, настройку и работу с утилитой. Покажем как выполнить резервное копирование в Облачное хранилище S3 от Selectel.

Создадим пользователя для облачного хранилища, учетные данные которого будем потом использовать для сохранения резервной копии. Перейдем в меню Пользователи и нажмем кнопку Создать пользователя:


Дополнительную информацию можно получить в нашей Базе знаний. Первую часть логина изменить нельзя — это идентификатор пользователя в панели управления. Вторая часть логина задается произвольно. Например, 123456_wal-g:


Заполним конфигурационный файл wal-g и изменим его владельца на учетную запись postgres:

Далее настроим автоматизированное создание резервных копий в PostgreSQL и перезагрузим процессы базы данных:

Теперь проверим корректность проведения настроек и загрузим резервную копию в хранилище:

После выполнения процесса резервного копирования, в созданном контейнере появится директория с резервными копиями баз данных:


Такой процесс в продакшене может выполняться при помощи планировщика заданий на регулярной основе.

Утилита pgAdmin

Управлять созданием резервных копий возможно также и в графическом интерфейсе. Для этого мы будем использовать утилиту pgAdmin. Актуальную версию для Windows или другой поддерживаемой ОС можно свободно скачать с официального сайта.


После скачивания утилиту нужно установить и запустить. Она работает в виде веб-приложения через браузер.

После добавления сервера с базой данных, в интерфейсе появляется возможность создания резервной копии. Аналогичным образом здесь же можно выполнить восстановление из резервной копии.


После выполнения команды Backup резервная копия сохраняется в заранее определенную директорию.


Работа с облачной базой данных в панели управления Selectel

В Облачной платформе Selectel есть возможность создавать управляемые базы данных (Managed Databases). Такие БД разворачиваются в несколько кликов мыши, однако, их основные преимущества — автоматическое резервное копирование, отказоустойчивость, быстрое масштабирование и управление различными характеристиками из графического интерфейса. Ниже мы создадим экземпляр управляемой базы данных, создадим резервную копию базы данных на виртуальном сервере и восстановим ее в управляемую базу данных.

Чтобы создать управляемую базу данных, перейдем в меню Базы данных и нажмем кнопку Создать кластер:


Появится форма создания кластера. Здесь можно выбрать версию PostgreSQL, конфигурацию кластера, настройки сети, режим пулинга и размер пула.


Обращаем внимание на блок Резервные копии, в котором указаны частота резервного копирования, время и срок хранения выгрузок. «Под капотом» используется механизм wal-g, о котором мы писали выше.


Автоматическое создание резервных копий отключить нельзя.

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


После этого появится приглашение ввести имя пользователя и пароль. После ввода этих данных нажимаем Сохранить.


Пользователь создан и отображается в списке пользователей.


Теперь создадим базу данных. Для этого перейдем на вкладку Базы данных и нажмем на кнопку Создать базу данных.


Заполняем необходимые поля и нажимаем кнопку Сохранить.

База данных создана и отображается в списке баз данных.


Теперь проверим возможность подключения. Для этого откроем консоль и вводим реквизиты:

В консоли должно появиться приглашение к вводу SQL-запроса или других управляющих команд.


Выполним резервное копирование при помощи команды pg_dump:

И следом резервное восстановление в созданную управляемую базу данных:

В результате выполнения команды выше мы восстановили резервную копию в управляемую базу данных.

Чтобы воспользоваться восстановлением из резервной копии, которая автоматически создается на платформе Selectel, необходимо нажать на символ с тремя точками. В открывшемся меню нужно нажать на опцию Восстановить. После этого появится модальное окно, в котором можно выбрать резервную копию, а также дату и время, на которое нужно восстановить базу данных. Это так называемый Point-in-Time Recovery из WAL-файлов.


Услуга «Управляемые базы данных в облаке» позволяет перенести существующий кластер PostgreSQL на сервис управляемых баз данных бесшовно и без простоя, обратившись в техническую поддержку. Инженеры Selectel готовы помочь с переносом, а также проконсультировать по всем связанным с этим процессом вопросам.

Заключение

Мы рассмотрели возможности выполнения резервного копирования и показали отличия утилит pg_dump, pg_dumpall, pg_restore, pg_basebackup и wal-g. Вы увидели как можно создать управляемую базу данных, чтобы переложить часть административных задач на облачного провайдера.

Узнать подробнее об управляемых базах данных можно в документации Selectel.

Читайте также: