PostgreSQL для 1С 8.3: ускоряем резервное копирование и восстановление для отдельной базы очень большого размера
База данных - HighLoad оптимизация
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Копирование-восстановление с помощью моментального снимка базы может потребоваться в разных случаях:
- копирование в другую базу в пределах кластера
- копирование в другую базу на другом сервере с более высокой версией PostgreSQL
- восстановление текущей базы
- восстановление некоторых таблиц текущей базы в случае падения 1С и т.д.
Задача 1. Копирование базы 1С на лету во время работы пользователей с сохранением целостности с помощью команд pg_dump.exe, psql.exe
Для этого в общем случае алгоритм следующий:
Шаг 1. Выгружаем с помощью pg_dump.exe все таблицы из базы данных, кроме данных таблицы config (т.е. для config выгружаем только ее схему)
Шаг 2. Выгружаем с помощью psql.exe данные таблицы public.config с помощью COPY WITH BINARY
Итак,
- Шаг 1. Выгружаем с помощью pg_dump.exe все таблицы из базы данных, кроме данных таблицы config (т.е. для config выгружаем только ее схему):
"<путь к pg_dump>\pg_dump.exe" и далее параметры с комментариями
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--role "postgres" - роль
--no-password – не спрашивать пароль в пакетном режиме
--format directory – создавать архив в виде каталога для использования параметра --jobs. При этом каждая таблица копируется в отдельный файл в каталоге, что позволяет распараллелить процесс создания архива
--jobs=<количество параллельных потоков процессора> - подбирается примерно как <количество ядер процессора>*2, можно пробовать увеличение или уменьшение параметра, чтобы максимально загрузить систему, не мешая работе пользователей. Практически на каждый процесс запускается копирование одной таблицы из базы данных. Сколько процессов задействовано, столько таблиц и обрабатывается одновременно. С помощью этого параметра можно достигнуть ускорения резервного копирования в 4 раза и более в зависимости от мощности оборудования сервера.
--blobs – позволяет выгружать поля большого размера
--encoding UTF8 - кодировка
--verbose – включить подробное комментирование
--exclude-table-data=config - исключить из выгрузки данные таблицы config, т.е. выгрузить только ее схему (config содержит записи: конфигурация, конфигурации поставщиков, отличия основной конфигурации от конфигураций поставщиков). Это требуется, когда база находится на поддержке у двух и более конфигураций поставщика и (или) очень много изменений внесено в конфигурацию. При этом размер изменений основной конфигурации относительно конфигурации одного из поставщиков приближается к 1Гб, что является пределом для поля большого размера в PostgreSQL. А 1С хранит изменения только в одной из записей таблицы config. При небольшом размере конфигурации можно не использовать этот параметр. Но при критическом (если размер хотя бы одной записи таблицы public.config (конфигурации) после чтения и распаковки в стандартный поток вывода stdout превысит 1 Гб) pg_dump.exe завершится с ошибкой:
pg_dump: Ошибка выгрузки таблицы "config": сбой в PQgetResult().
pg_dump: Сообщение об ошибке с сервера: invalid memory alloc request size 11173708065
pg_dump: Выполнялась команда: COPY public.config (filename, creation, modified, attributes, datasize, binarydata) TO stdout;
Если используется --format custom, то архив выгружается в виде одного файла, и ошибка создания архива на таблице public.config обнаружится при выполнении команды pg_restore, что и есть самое неприятное:
pg_restore: обрабатываются данные таблицы "public._usersworkhistory"
pg_restore: обрабатываются данные таблицы "public._yearoffset"
pg_restore: обрабатываются данные таблицы "public.config"
pg_restore: [внешний архиватор] не удалось прочитать входной файл: конец файла
(кроме того --format custom не позволит использовать --jobs - распараллеливание)
Наблюдается на больших конфигурациях KA 1.1-2.4, УПП 1.3, ERP 2.4.
--file "<имя каталога архива без таблицы config>"
"<имя базы данных>"
Шаг 2. Выгружаем с помощью psql.exe данные таблицы public.config с помощью COPY WITH BINARY:
md "<имя каталога архива только с таблицей config >" - создаем каталог для таблицы config
"<путь к psql>\psql.exe" – далее параметры
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--no-password – не спрашивать пароль в пакетном режиме
--command "COPY public.config TO '<имя каталога архива только с таблицей config с разделителями \\ для винды>' WITH BINARY;"
--dbname="<имя базы данных>"
Задача 2. Восстановление базы 1С в копию во время работы пользователей с сохранением целостности с помощью команд pg_restore.exe, psql.exe. Для этого в общем случае алгоритм следующий:
Шаг 0. Создаем пустую копию базы средствами pgAdmin.exe или с помощью psql.exe, dropdb, createdb.
Шаг 1. Загружаем с помощью pg_restore.exe все таблицы из архива базы данных, кроме данных таблицы config (т.е. для config загружаем только ее схему)
Шаг 2. Загружаем с помощью psql.exe данные таблицы public.config с помощью COPY WITH BINARY
Шаг 0. Создаем пустую копию базы средствами pgAdmin.exe или с помощью psql.exe, dropdb, createdb.
Если база данных существует, мы должны сначала удалить ее из кластера с помощью команды DROP DATABASE "<имя базы данных>", а затем создать заново с помощью команды CREATE DATABASE "<имя базы данных>". Проще всего это сделать через pgAdmin, так как в нем есть запрос на удаление базы и образец запроса на создание базы. При удалении базы необходимо закрыть все соединения с базой, иначе база не будет удалена. Для Windows запрос на создание базы выглядит так:
CREATE DATABASE "<имя базы данных>"
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'Russian_Russia.1251'
LC_CTYPE = 'Russian_Russia.1251'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
Если мы время от времени хотим проверять, что база корректно достается из архива, то имеет cмысл автоматизировать шаг 0 в батнике командами psql, dropdb, createdb (добавлено по просьбам читателей):
0.1 Перед удалением закрываем все активные соединения с базой <имя базы данных>, кроме текущего:
"<путь к psql>\psql.exe" – далее параметры
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--dbname="<имя базы данных>"
--no-password – не спрашивать пароль в пакетном режиме
--command "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '<имя базы данных>' AND pid <> pg_backend_pid();"
0.2 Удаляем базу <имя базы данных>, если она существует без подтверждения об удалении.
"<путь к dropdb>\dropdb.exe"
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--no-password – не спрашивать пароль в пакетном режиме
--if-exists - проверка существования базы
--echo - вывод команд SQL, которые выполнит postgreSQL при вызове
"<имя базы данных>"
0.3 Создаем заново базу <имя базы данных> после удаления
"<путь к createdb>\createdb.exe"
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--no-password – не спрашивать пароль в пакетном режиме
--echo - вывод команд SQL, которые выполнит postgreSQL при вызове
--owner="postgres" - владелец базы
--encoding="UTF8" - кодировка
--locale="Russian_Russia.1251" - устанавливает одновременно параметры LC_COLLATE и LC_CTYPE для базы данных.
--tablespace="pg_default" - указывает табличное пространство, используемое по умолчанию.
"<имя базы данных>"
Теперь уже не нужно даже лезть в pgAdmin и там корячиться.
Шаг 1. Загружаем с помощью pg_restore.exe все таблицы из архива базы данных, кроме данных таблицы config (т.е. для config загружаем только ее схему):
"<путь к pg_restore>\pg_restore.exe"
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--role "postgres" - роль
--no-password – не спрашивать пароль в пакетном режиме
--dbname "<имя базы данных в которую восстанавливаем>"
--jobs=<количество параллельных потоков процессора> - подбирается примерно как <количество ядер процессора>*2, можно пробовать увеличение или уменьшение параметра, чтобы максимально загрузить систему, не мешая работе пользователей. Практически на каждый процесс запускается восстановление одной таблицы базы данных. Сколько процессов задействовано, столько таблиц и индексов обрабатывается одновременно. С помощью этого параметра можно достигнуть ускорения восстановления базы в 2-3 раза и более в зависимости от мощности оборудования сервера.
--verbose – включить подробное комментирование
"<имя каталога архива без таблицы config>"
Шаг 2. Загружаем с помощью psql.exe данные таблицы public.config с помощью COPY WITH BINARY
"<путь к psql>\psql.exe" – далее параметры
--host <ip адрес или имя хоста сервера>
--port <порт>
--username "postgres" – имя пользователя
--dbname="<имя базы данных>"
--no-password – не спрашивать пароль в пакетном режиме
--command "\COPY public.config FROM '<имя каталога архива только с таблицей config с разделителями \\ для винды>' WITH BINARY;"
Обратите внимание на метакоманду \COPY вместо просто COPY.
\COPYоткрывает файл и передает содержимое на сервер, тогда как COPY сообщает серверу, что он сам открывает файл и читает его, что может быть проблематичным по разрешению или даже невозможно, если клиент и сервер работают на разных компьютерах без совместного доступа к файлам между ними.
Соответственно при использовании просто COPY может выскочить следующая ошибка:
Postgres ERROR: Permission denied (не удалось открыть файл для чтения)
Заметим, что архив базы может быть успешно восстановлен на последующих версиях PostgreSQL. В моем случае, я переносил базу с сервера PostgreSQL 9.6 на PostgreSQL 10.3.
Все проходило гладко. Трудности теоретически могут возникнуть в команде \COPY, т.к. она является платформо-зависимой.
На реальной базе размером 380 Гб за счет распараллеливания было достигнуто ускорение при работе pg_dump - в 4 раза, при работе pg_restore - в 2,5 раза, что весьма существенно, когда процесс занимает несколько часов.
Было: 2 часа на копирование, стало 0,5 часа на копирование; было 10 ч на восстановление, стало 4 ч на восстановление.
После перехода на более мощный сервер получили еще более существенные результаты:
Было: 2 часа на копирование, стало 0,5 часа на копирование; было 10 ч на восстановление, стало 1 ч 40 мин на восстановление. То есть количество ядер процессора и более быстрые диски при тех же параметрах дают значительное ускорение. Теперь чтобы скопировать и развернуть нашу огромную базу требуется всего 2 часа!
Ниже привожу примеры bat-файлов (качайте) для создания архивной копии базы данных DO_PROBA и восстановления в другую базу данных DO_PROBA_COPY. При этом в названии каталогов архива используется дата и время начала архивации и выводятся замеры времени на создание-восстановление. При восстановлении из вновь созданного архива необходимо каждый раз менять дату и время в bat-файле для восстановления (ее можно скопировать из имени каталога архива по образцу). Теперь будьте очень осторожны при восстановлении базы. По просьбам читателей и пользователей в bat-файлы добавлены команды автоматического удаления и создания восстанавливаемой базы в случае ее существования. Не ошибитесь в наименовании базы в команде SET ar_base_to=<Имя базы, куда восстанавливаем> !!! Иначе можно легко порушить существующие базы.
СОВЕТ 1: периодически проверяйте (хотя бы раз в неделю) загрузку бэкапа в какую-нибудь тестовую базу и запускайте для проверки работоспособности режим конфигуратора 1С и рабочий режим. Тогда всегда будете уверены в своей архивной копии!
СОВЕТ 2: после отладки копирования и восстановления можно настроить Планировщик заданий (для Windows) на запуск нашего bat-файла по выбранному расписанию. Например, в 3:00 ночи ежедневно, пока никто из пользователей не работает.
*********
С 4 по 6 февраля 2019 года в стенах Московского государственного университета состоится конференция по PostgreSQL – PGConf.Russia 2019. Ежегодно она собирает более 500 разработчиков, администраторов баз данных и IT-менеджеров для обмена опытом и профессионального общения.
На этот раз PGConf.Russia будет особенной. Инфостарт совместно с Postgres Pro организует на конференции секцию «Postgres+1C». Мы приглашаем участников сообщества посетить PGConf и даже выступить в качестве докладчика.
Вступайте в нашу телеграмм-группу Инфостарт
PostgreSQL копирование восстановление pg_dump pg_restore psql copy 1C
См. также
Поиск данных Инструменты администратора БД Корректировка данных Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Решение для автоматической сверки данных между любыми конфигурациями 1С. Помогает контролировать и проверять обмены, проверять наличие документов при переносах данных, находить изменения в закрытых периодах
9760 руб.
14.11.2025 6155 28 8
Задачи пользователя Инструментарий разработчика Корректировка данных Закрытие периода Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)
Обработка предназначена для поиска, анализа и исправления отрицательных остатков во всех регистрах накопления информационной базы 1С.
6100 руб.
27.02.2026 3187 17 3
Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)
Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).
14640 руб.
29.04.2020 52931 145 164
Зарплата Корректировка данных Бухгалтер 1С 8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Бухгалтерский учет НДФЛ Платные (руб)
Внешняя обработка сравнивает НДФЛ из расчетного листка и НДФЛ из регистра, на разницу формирует операцию учета НДФЛ. Исправляет расхождения, в том числе, когда Аванс больше Зарплаты Рассчитывает НДФЛ и сравнивает с исчисленным в программе. На отклонение формирует документ "Перерасчет НДФЛ"
9760 руб.
01.09.2023 10100 325 93
Корректировка данных Разработчик Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)
Представьте, что есть система QR - кодирования, которая НЕ ТРЕБУЕТ изменения конфигурации, НЕ ТРЕБУЕТ изменения ни одной печатной формы для добавления QR-кода, включая внешние, НЕ ХРАНИТ данные штрихкодов и их связь, от чего база не "пухнет", ИМЕЕТ возможность закодировать в QR-коде произвольные данные параметров для последующей обработки полученных данных, УМЕЕТ прикреплять сканы, УМЕЕТ обработать считанный QR-код как ВЫ захотите. А также ХРАНИТ историю операций в обход базы для каждого пользователя в отдельности и УМЕЕТ работать с 2D - сканерами. А также автоматически распознавать отсканированные печатные формы (картинки или pdf-файлы) и выполнять заданные произвольные алгоритмы, в том числе прикрепление их к документам! Обновление 3.3 от 24.06.2025!
26840 руб.
26.08.2018 57629 20 65
Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)
24400 руб.
27.10.2017 47839 33 15
Закрытие периода Корректировка данных Разработчик Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)
Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.
5084 руб.
13.07.2015 55905 191 31
Корректировка данных Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С:Предприятие 8 1С:Управление торговлей 11 1С:Розница 3.0 1C:ERP 1С:ЗУП 1С:УТ Платные (руб)
Инструмент для анализа и устранения битых записей в регистрах 1С:Предприятия. Позволяет поддерживать целостность данных и повышает стабильность работы системы. Обработка предназначена для диагностики и корректировки ошибок в регистрах накопления и сведений. Обеспечивает контроль корректности данных и упрощает администрирование информационной базы. Решение для автоматизированного выявления и исправления записей в регистрах 1С. Снижает вероятность сбоев при расчётах и формировании отчётности.
5490 руб.
05.09.2025 2187 4 0
А ни у кого не случается иногда такая ошибка при ресторе?
pg_restore: обрабатываются данные таблицы "public._usersworkhistory"
pg_restore: обрабатываются данные таблицы "public._yearoffset"
pg_restore: обрабатываются данные таблицы "public.config"
pg_restore: [внешний архиватор] не удалось прочитать входной файл: конец файла
Причём всегда после конфига и иногда рестор отрабатывает без ошибки на том же самом дампе
месяц прошёл в старой теме (, повторим - может есть адекватные ответчики, спасибо
Сам недавно наткнулся на них. Это означает - ваш архив базы - битый, но это вы не увидите, пока не используете pg_restore. Используйте мой вариант, когда отдельно выгружается public.config с помощью COPY WITH BINARY. Он будет работать всегда, т.к. конфигурация относительно редко меняется.
Не подскажите, что это значит:
Starting restore process...
Using database: sd2upp_cc
Main backup restored successfully.
H:/Backup_1C/ConfigR: Permission denied
Восстановление основной базы проходит:
%PGBIN%\pg_restore -U %PGUSER% -h %PGHOST% -p %PGPORT% -d %DBNAME% %BACKUP_SQL% >> %LOGFILE% 2>&1
а воостановление Config ошибка:
%PGBIN%\psql.exe -U %PGUSER% -h %PGHOST% -p %PGPORT% -d %DBNAME% --command "\COPY public.config FROM 'H:\\Backup_1C\\ConfigR' WITH BINARY;" >> %LOGFILE% 2>&1
Запускаю от имени администратора. Пробовал на разных дисках.
--exclude-table=config - исключить из выгрузки таблицу config. Это требуется, когда база находится на поддержке у двух и более конфигураций поставщика и (или) очень много изменений внесено в конфигурацию. При этом размер изменений основной конфигурации относительно конфигурации одного из поставщиков приближается к 1Гб, что является пределом для поля большого размера в PostgreSQL. А 1С хранит изменения только в одной из записей таблицы config. При небольшом размере конфигурации можно не использовать этот параметр. Но при критическом pg_dump.exe завершится с ошибкой:
pg_dump: Ошибка выгрузки таблицы "config": сбой в PQgetResult().
pg_dump: Сообщение об ошибке с сервера: invalid memory alloc request size 11173708065
pg_dump: Выполнялась команда: COPY public.config (filename, creation, modified, attributes, datasize, binarydata) TO stdout;
Если используется --format custom, то архив выгружается в виде одного файла, и ошибка создания архива на таблице public.config обнаружится при выполнении команды pg_restore, что и есть самое неприятное:
pg_restore: обрабатываются данные таблицы "public._usersworkhistory"
pg_restore: обрабатываются данные таблицы "public._yearoffset"
pg_restore: обрабатываются данные таблицы "public.config"
pg_restore: [внешний архиватор] не удалось прочитать входной файл: конец файла
(кроме того --format custom не позволит использовать --jobs - распараллеливание)
Наблюдается на больших конфигурациях KA 1.1-2.4, УПП 1.3, ERP 2.4.
Сам делал через:
psql -c "COPY (select * from public.config where datasize < 629605263) TO '/var/lib/pgsql/arhiv/$filename.config'" db
Но потом необходимо cf подгружать.
Вместо --exclude-table можно использовать --exclude-table-data=config, тогда структура таблицы config выгрузится без данных, и можно в два шага выгружать.
Подскажите, а можно предыдущий вариант, где был шаг 3 всё таки тоже изложить в статье? Дело в том, что в Postgres 9.1.Х на работает параметр --exclude-table-data=config. Он, похоже появился только в 9.3.Х. Но параметр --exclude-table работает.
Теперь будьте очень осторожны при восстановлении базы. По просьбам читателей и пользователей в bat-файлы добавлены команды автоматического удаления и создания восстанавливаемой базы в случае ее существования. Не ошибитесь в наименовании базы в команде SET ar_base_to=<Имя базы, куда восстанавливаем> !!! Иначе можно легко порушить существующие базы.
Побилась база 1с.
Есть бекап в виде выгрузки 1c из postgres 9.4 формат *.sql
Весит 100 гигов.
Обратно не загружается. Ввожу вот такую команду
"C:\Program Files\PostgresPro 1C\9.4\bin\psql.exe" -U postgres gef_restore < E:\BackUp\gef201811300311.sql
Выводит вот такое:
Посоветуйте что можно сделать. Готов заплатить.
Необходимо для создания архива использовать pg_dump, pg_restore. Вот что написано в документации:
pg_dump
Название
pg_dump -- выгрузить базу данных PostgreSQL в формате скрипта в файл или архив
Синтаксис
pg_dump [ параметр-подключения ...] [ параметр ...] [ база_данных ]
Описание
pg_dump это приложение для резервирования баз PostgreSQL. Оно создаёт согласованные копии, в том числе и на работающих базах данных. pg_dump не блокирует других пользователей базы, ни на чтение, ни на запись.
Приложение выводит данные либо в скрипты, либо в архивные форматы файлов. Скрипты представляют собой текстовые файлы, содержащие SQL-команды, необходимые для воссоздания базы данных до состояния на момент создания скрипта. Для восстановления из скрипта его содержимое можно передать утилите psql . Скрипты можно использовать для восстановления на других машинах, в том числе с иной архитектурой. Также скрипты с некоторыми изменениями можно использовать в других базах данных SQL.
Для восстановления из архивных форматов файлов используется утилита pg_restore. Эти форматы позволяют указывать pg_restore какие объекты базы данных восстановить, а также позволяют изменить порядок следования восстанавливаемых объектов. Архивные форматы файлов спроектированы так, чтобы их можно были переносить на другие платформы с другой архитектурой.
Применение архивных форматов в сочетании утилит pg_restore и pg_dump позволяет организовывать эффективный механизм архивации и переноса данных. pg_dump можно использовать для резервирования всей базы данных, а затем при применении pg_restore выбрать нужные объекты для восстановления. Наиболее гибкие форматы резервных файлов это "custom" (-Fc) и "directory" (-Fd). Они позволяют выбрать и изменить порядок объектов, поддерживают восстановление в несколько потоков, а также сжимаются по умолчанию. При этом формат "directory" единственный, позволяющий выгружать данные в несколько потоков.
Во время работы pg_dump следует обращать внимание на предупреждения, которые печатаются в стандартный поток ошибок, особенно ввиду рассмотренных далее ограничений.
В 100 гиговом файле копаться - это не сахар.
Надо бы какую нить утилиту придумать, которая шринкает этот файл на маленькие и загружает их частями.
ПС. Какой-то из MS SQL рестореров так и делал: шринковал на кучу маленьких файлов.
(23) А сколько в архиве весит файло?
Жаль не нашел её месяцем раньше, и вот почему.
Столкнулся тут недавно с проблемой выгрузки таблицы config после обновления релиза 112,5 конфигурации УПП 1.3 на платформе 8.3
Решил что таблица битая, нашёл и удалил строку на которой процесс дампа вылетал с ошибкой.
Теперь наткнулся на эту статью и понимаю что скорее всего удалил нужные данные.
У меня несколько вопросов.
1. Можно как-то найти теперь данные что были удалены ?
Есть дамп до обновления и текущая рабочая база.
2. Размер таблицы config до обновления - 671 MB, а после обновления он разрастается до 5939 MB. Мне одному кажется это странным ?
3. В чём профит использования формата выгрузки "directory" кроме возможности распараллеливания задачи?
Дампы делаются ночью и времени на их выполнение вполне хватает при использовании формата "custom". Важнее быстро восстановить бэкап и формат "custom" позволяет использовать распараллеливание задач при восстановлении.
Спасибо!
2. Я с той же проблемой тоже столкнулся месяц назад, пробовал удалять записи из config и проверять обновление, но вовремя остановился, т.к. следующее обновление пошло не совсем корректно. Странностей нет в таблице config: при обновлении подгружаются все изменения основной конфигурации от всех конфигураций поставщика, сама конфигурация поставщика.
3. Если не критично время создания архива, можно использовать формат "custom". Кроме параллельности создания архива "directory" лишь обеспечивает хранение каждой таблицы в отдельном файле, соответственно можно просматривать содержимое для каждой таблицы отдельно, не загружая в бд. Скорость распаковки в "directory" также выше, поскольку чтение и распаковка идет в несколько потоков. Но потом, после чтения время уходит на создание индексов - оно одинаково, что для "custom", что и для "directory"
Надо подождать 11-ю версию(подтверждения ее работоспособности с 1С), там предусмотрено параллельное создание индексов.
2. Спасибо за разъяснение.
3. Каждая таблица отдельно, но не с нормальными именами, а в виде номеров. Можно как-то вытащить соответствие этих номеров именам таблиц ?
С использованием формата "custom" распаковка тоже возможна в несколько потоков(собственно так и делаю).
Можно протестировать разницу, замерив скорость восстановления одной и той же базы из дампов разных форматов.
3. Вероятно, можно, но зачем. На порченную таблицу все равно ругнется при восстановлении. Там уже будет нормальное наименование таблицы. Извлечь легко прямо в базу с помощью --table.
настроить резервное копирование с помощью утилиты pg_basebackup:
Подробно о настройке можно прочитать:
3. Вероятно, можно, но зачем. На порченную таблицу все равно ругнется при восстановлении. Там уже будет нормальное наименование таблицы. Извлечь легко прямо в базу с помощью --table.
А для родственной проблемы с индексацией есть какое-то решение (кроме снять/поставить на поддержку)?
Выходит такое сообщение при индексации:
reindexdb: переиндексировать базу данных "upp" не удалось: ОШИБКА: could not open relation with OID 8159083
Спасибо.
Подскажите, УПП обновили на 114.1. После этого не смогли обновиться дальше, т.к. при попытке сравнения конфигурации с конфигурацией поставщика сразу же выпадает ошибка - "Недостаточно памяти для получения результата запроса к базе данных". У нас текущая связка ПГ-64бит и Сервер 1С 32бит.
Было испробовано много разных вариантов, но все без толку. Затем обнаружили, что перестали выполняться дампы ПГ с ошибкой "pg_dump: Error message from server: ERROR: invalid memory alloc request size 1117677223".
Теперь вроде как понятно, что это проблема с ПГ, НО остается такой вопрос - мы взяли эту базу и протестили ее на других серваках. Связка SQL и Сервер32, связка SQL и Сервер64 - работают без проблем. Связка PG64 + Сервер64 - тоже работает! Получается не работает только PG64 + Сервер32. У всех так? И при чем тут сервер 1С?
В Вашем случае - вполне возможно. В ряде случаев может помочь и установка 64-х разрядной клиентской части платформы 1С.
Поиск в сервисе публикации ошибок(1С) по фразе "недостаточно памяти" показывает, что при работе в конкретных конфигурациях также может возникать такая ошибка, например, из-за большого объема получаемых(загружаемых) данных.
По хорошему - все компоненты системы должны быть 64-х разрядными и самой памяти должно быть достаточно. Понятно, что это вопрос денег...
Кто может объяснить параметры?
Объясните пожалуйста параметры??
<имя каталога архива только с таблицей config с разделителями \\ для винды>
Вот пример ниже.
1. копируем таблицу public.config в файл c:\backup\config :
--command "COPY public.config TO 'c:\\backup\\config' WITH BINARY;"
2. восстанавливаем таблицу public.config из файла c:\backup\config :
--command "\COPY public.config FROM 'c:\\backup\\config' WITH BINARY;"
Ограничение Postgres в 1Гб также не дает обновить конфигурацию, которая находится на поддержке, из-за размера таблицы config.
Я не силен во внутреннем устройстве 1С, но получается, что можно снять с поддержки, обновиться, поставить на поддержку и загрузить изменения конфигурации как-то. Я сейчас на уровне проектирования решения. Вообще не уверен, что можно как-то объединить config до обновления и после.
Как вы обходите это? Или конфигурация на поддержке несовместима с Postgres, если размер больше 1ГБ?
В крайнем случае, можно попробовать накатить ваши изменения заново на свежий полный релиз от 1С, минимально снимая объекты с замка ("Поддержка с возможностью изменений"). Результат не гарантирован. Если полученный после объединения cf загрузить в рабочую базу, то объекты, случайно снятые с замка в рабочей базе встанут обратно на замок. А те, которые были в статусе "Поддержка с возможностью изменений" будут минимизированы.
Скорее всего из за этого на шаге 2 (копировании таблицы public.config из файла) получаю ошибку psql "ERROR: relation "public.config" does not exist".
Что то с этим можно сделать? Оригинал базы потерян из за сбоя((
pg_restore: создаётся INDEX "public._task106_37"
pg_restore: [архиватор (БД)] Ошибка из записи оглавления 4933; 1259 6986533 INDEX _task106_37 postgres
pg_restore: [архиватор (БД)] could not execute query: ERROR: relation "_task106_37" already exists
Выполнялась команда: CREATE UNIQUE INDEX _task106_37 ON public._task106 USING btree (_fld883, _idrref);
Куда копать?
У нас используется Postgres 9.6.7-1C
Попытался сделать резервное копирование с помощью pg_dumpall.
У нас более разных 10 баз, поэтому довольно удобно.
для проверки восстановления сделали сервер такой же версии на другом компьютере.
Средствами 1С базы на нем создаются в кодировке ru_Ru.UTF8
Но при попытке восстановить базы из архива восстанавливает в кодировке SQL_ASQII.
Подскажите, пожалуйста, можно ли вообще выполнять архивирование баз 1С с помощью pg_dumpall, если можно, то как архивировать-восстанавливать в правильной кодировке?
c:\Program Files\pgAdmin 4\v4\runtime>psql.exe --host "192.168.0.52" --port "5432" --username "postgres" --no-password --command "COPY ublic.config TO 'E:\000\config' WITH BINARY;" --dbname="1C_CustomMade"
ERROR: invalid byte sequence for encoding "UTF8": 0x00попал в ситуацию - из корректных данных осталась только папка "base"
удалось руками создать в Postgres базу с таким же OID
подсунул папку данных
выгрузить архив не дает
ошибки:
pg_dump: error: query failed: ERROR: relation "public._yearoffset" does not exist
pg_dump: error: query was: LOCK TABLE public._yearoffset IN ACCESS SHARE MODE
из консоли 1С-Сервера достучаться до базы тоже не удается:
"Ошибка создания информационной базы.
Ошибка операции администрирования"
Ошибка при выполнении операции с информационной базой
нарушено условие уникальности данных.
Попытка вставки неуникального значения в уникальный индекс:
23505: ERROR duplicate key value violates unique constraint "pg_proc_proname_args_nsp_index"
DETAIL: Key (proname, proargtypes, pronamespace)=(datediff2, 1043, 1114 1114, 2200) already exists.
может не все потеряно с моей базой?
кто может помочь?
И не понятно. Могли что-то разработчики изменить, например, в конфигурации?
И не понятно. Могли что-то разработчики изменить, например, в конфигурации?
Все делаю по вашей статье, но при загрузке таблицы public.config пишет
ОШИБКА: количество полей в строке: 6, ожидалось: 7
КОНТЕКСТ: COPY config, строка 1
при запуске этой базы пропали все роли пользователей
Направьте, пожалуйста, куда копать
Спасибо, очень полезная статья.
Можно ли восстановление сделать через pgadmin 6.18?
Удалить базу, создать новую, загрузить базу (Правой кнопкой на базе-Restore) и загрузить таблицу Config (Правой кнопкой на таблице Config-Restore) ?
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 956734
Создание 03.12.18 20:26
Обновление 09.01.19 11:52
Просмотры 54958
Загрузки 98
Рейтинг
147
Комментарии 88
Код открыт Да
Рубрики HighLoad оптимизация Корректировка данных
Кому
Системный администратор
,
Разработчик
Тип файла Архив с данными
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система PostgreSQL
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)