Ошибка входной файл видимо имеет текстовый формат загрузите его с помощью psql
У меня есть схема базы данных с именем: 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 - подключаемся к серверу - кликаем правой кнопкой мыши по базе, для которой хотим сделать дамп - выбираем Резервная копия:
В открывшемся окне выбираем путь для сохранения данных и настраиваемый формат:
При желании, можно изучить дополнительные параметры для резервного копирования:
После нажимаем Резервная копия - ждем окончания процесса и кликаем по Завершено.
Не текстовые форматы дампа
Другие форматы позволяют делать частичное восстановление, работать в несколько потоков и сжимать данные.
Алгоритм резервного копирования баз 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. Для резервного копирования логической схемы и данных можно использовать как встроенные инструменты СУБД, так и внешние. В этой статье мы разберем оба варианта.
В статье будем использовать виртуальный сервер с конфигурацией 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.
Читайте также: