К статье
Практический материал

Администрирование · 11 мин

Как удалить базу 1С с сервера PostgreSQL

Как безопасно удалить базу 1С с сервера PostgreSQL: через pgAdmin, консоль и кластер серверов 1С. Резервная копия, завершение сеансов, проверка результата и типичные ошибки.

Удаление базы 1С с сервера PostgreSQL — типовая задача при выводе из эксплуатации тестовых контуров, переносе информационной базы на другой сервер или очистке дискового пространства. Операция выполняется средствами самой СУБД, а не конфигуратором 1С, и требует аккуратности: команда DROP DATABASE необратима.

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

Материал рассчитан на администратора, имеющего доступ к серверу PostgreSQL с правами суперпользователя или владельца базы, а также доступ к консоли кластера серверов 1С, если база была зарегистрирована в клиент-серверном режиме.

Что именно удаляется и как устроена связка 1С и PostgreSQL

В клиент-серверном варианте работы 1С хранит данные в базе PostgreSQL, а сервер 1С:Предприятия выступает посредником между клиентами и СУБД. В консоли кластера серверов 1С база отображается как зарегистрированная информационная база с указанием имени базы данных, сервера СУБД и пользователя.

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

Подготовка: резервная копия и проверка имени базы

Первое действие перед любым удалением — полная резервная копия. Даже если база кажется ненужной, практика показывает, что запросы на восстановление «старых» данных появляются спустя недели и месяцы. Копия создаётся штатной утилитой pg_dump.

Сопоставьте имя базы с записью в консоли кластера серверов 1С: откройте свойства информационной базы и сверьте поле «База данных». Ошибка в одном символе имени — самая частая причина удаления «не той» базы.

Завершение активных сеансов перед удалением

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

Надёжная последовательность такова: сначала заблокируйте сеансы в консоли кластера серверов 1С (свойства информационной базы, параметр «Блокировка начала сеансов») или удалите регистрацию базы из кластера, затем принудительно завершите оставшиеся подключения на стороне PostgreSQL.

sql
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'ut_test' AND pid <> pg_backend_pid();

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

Удаление базы через psql и pgAdmin

Удаление через консоль psql

Подключитесь к серверу под учётной записью с правами на удаление (суперпользователь postgres или владелец базы) и выполните команду DROP DATABASE. Подключаться при этом нужно к любой другой базе, например к служебной postgres — удалить базу, находясь внутри неё, нельзя.

bash
psql -U postgres -d postgres -c "DROP DATABASE ut_test;"

В современных версиях PostgreSQL доступен вариант DROP DATABASE ... WITH (FORCE), который сам завершает активные подключения. Это удобно, но опаснее: используйте принудительный режим только когда уверены, что подключения не выполняют важных операций.

Удаление через pgAdmin

В графическом интерфейсе pgAdmin найдите базу в дереве сервера, щёлкните по ней правой кнопкой и выберите Delete/Drop. Перед этим отключите базу от новых соединений (правый клик → Disconnect Database) и завершите существующие сеансы через вкладку Dashboard, иначе получите ошибку «database is being accessed by other users».

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

Порядок действий
  1. 1
    Создайте резервную копию базы утилитой pg_dump и проверьте файл
  2. 2
    Сверьте имя базы в PostgreSQL с записью в консоли кластера 1С
  3. 3
    Заблокируйте сеансы или удалите регистрацию базы в кластере 1С
  4. 4
    Завершите оставшиеся подключения через pg_terminate_backend
  5. 5
    Выполните DROP DATABASE в psql или Delete в pgAdmin
  6. 6
    Проверьте отсутствие базы в списке и освобождение места на диске

Удаление записи в кластере серверов 1С

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

Альтернативный порядок — начать с консоли кластера и выбрать вариант «Удалить базу данных»: тогда сервер 1С сам выполнит DROP DATABASE на стороне PostgreSQL. Этот способ проще, но требует, чтобы учётная запись СУБД, указанная в свойствах базы, имела соответствующие права, и не даёт контроля над предварительным бэкапом.

Сравнение вариантов

Удаление средствами PostgreSQL

Полный контроль: бэкап, завершение сеансов, проверка имени. Подходит для продуктивных баз, но требует доступа к серверу СУБД.

Удаление через консоль кластера 1С

Быстро и в одном месте, запись и база удаляются вместе. Ограничение: нет встроенного создания резервной копии, нужны права учётной записи СУБД.

Только снятие регистрации в кластере

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

Проверка результата и освобождение дискового пространства

После удаления убедитесь, что база исчезла из списка: выполните \l в psql или обновите дерево в pgAdmin. Дополнительно проверьте, что в консоли кластера 1С не осталось записи об информационной базе, иначе пользователи увидят её в списке выбора и получат ошибку при попытке входа.

DROP DATABASE удаляет каталог базы внутри каталога данных PostgreSQL, поэтому место на диске освобождается сразу, без дополнительных операций вроде VACUUM. Проверьте свободное место командой df -h на сервере — оно должно увеличиться примерно на размер удалённой базы.

Контрольные точки

Как проверить результат

Список баз PostgreSQL (\l или pg_database)
Норма

Удалённой базы нет в списке

Тревожный признак

База присутствует — удаление не выполнено или удалена другая база

Консоль кластера серверов 1С
Норма

Запись об информационной базе отсутствует

Тревожный признак

Запись осталась, при входе пользователи получат ошибку соединения

Свободное место на диске сервера
Норма

Объём свободного места вырос на размер базы

Тревожный признак

Место не изменилось — проверьте, та ли база удалена

Файл резервной копии
Норма

Файл существует, размер соответствует базе, копируется без ошибок

Тревожный признак

Файл нулевого размера или отсутствует — восстановление невозможно

Типичные ошибки и ограничения

Самая распространённая ошибка — попытка удалить базу при активных подключениях. PostgreSQL вернёт ошибку «database is being accessed by other users», и операция не выполнится. Решение — завершение сеансов через pg_terminate_backend, как описано выше.

Вторая частая проблема — недостаток прав. Учётная запись, под которой сервер 1С работает с базой, обычно является владельцем базы и может её удалить, но если вы подключаетесь другой учётной записью, получите отказ. Используйте суперпользователя postgres или владельца конкретной базы.

Отдельный риск — удаление базы на «не том» сервере при работе с несколькими окружениями (продуктивное и тестовое). Перед выполнением DROP DATABASE проверьте адрес сервера в строке подключения и, при возможности, выполните SELECT inet_server_addr() для подтверждения.

Типичные ошибки
01
Удаление без резервной копии — восстановить данные после DROP DATABASE штатными средствами невозможно
02
Удаление только записи в кластере 1С — база остаётся в PostgreSQL и продолжает занимать диск
03
Удаление базы при активных сеансах сервера 1С — соединения пересоздаются, и операция блокируется
04
Путаница между тестовым и продуктивным сервером — удаляется рабочая база, учёт останавливается
05
Удаление под учётной записью без прав — ошибка доступа и ложный вывод о сбое СУБД

Частые вопросы

Можно ли восстановить базу после DROP DATABASE?

Штатными средствами PostgreSQL — нет, команда удаляет файлы базы безвозвратно. Восстановление возможно только из резервной копии (pg_dump, файловый бэкап каталога данных) или из реплики, если она была настроена. Именно поэтому бэкап перед удалением обязателен.

Чем удаление базы отличается от её очистки в консоли кластера 1С?

Очистка удаляет все данные и объекты внутри базы, но сама пустая база остаётся на сервере PostgreSQL. Удаление убирает базу целиком вместе с каталогом на диске. Очистка используется, когда базу планируют наполнить заново, например для нового обмена.

Нужно ли останавливать службу сервера 1С перед удалением базы?

Нет, останавливать весь сервер 1С не требуется — это затронет другие базы того же кластера. Достаточно заблокировать сеансы конкретной информационной базы или снять её регистрацию в кластере, после чего завершить оставшиеся подключения на стороне PostgreSQL.

Почему после удаления базы место на диске не освободилось?

Чаще всего удалена не та база либо удаление фактически не выполнилось из-за ошибки. Проверьте список баз и размер каталога данных PostgreSQL. Также учтите, что большой объём могут занимать файлы журналов WAL и временные файлы — они к конкретной базе не относятся и удалением базы не затрагиваются.

Можно ли удалить базу, если сервер 1С недоступен?

Да. База PostgreSQL удаляется независимо от сервера 1С — достаточно доступа к СУБД. Запись в кластере серверов 1С останется «битой», и её нужно будет удалить позже, когда консоль администрирования станет доступна.

Как удалить сразу несколько тестовых баз?

Выполните DROP DATABASE для каждой базы отдельно — команда не поддерживает список имён. Для массового удаления удобно сформировать скрипт из списка баз, предварительно сверив каждое имя и сделав резервные копии всех удаляемых баз.

Итог

Что важно запомнить

Безопасное удаление базы 1С с сервера PostgreSQL строится на трёх правилах: сначала резервная копия через pg_dump, затем завершение всех сеансов, и только потом DROP DATABASE. Запись в кластере серверов 1С удаляется отдельно. После операции проверьте отсутствие базы в списке, чистоту консоли кластера и освобождение дискового пространства.