Как найти файлы информационной базы 1С на сервере PostgreSQL

· 9 мин

Содержание

База 1С на сервере PostgreSQL лежит не отдельным файлом, а внутри каталога данных СУБД — data_directory. Сама информационная база там — папка base/<OID>, где OID — числовой идентификатор базы данных. Быстрее всего узнать точный путь запросом SHOW data_directory; в psql. Типовые расположения: /var/lib/postgresql/<версия>/main в Debian и Ubuntu, /var/lib/pgsql/<версия>/data в RHEL-подобных системах, C:\Program Files\PostgreSQL\<версия>\data в Windows.

Ситуация из практики: админ уволился, на сервере 1С крутится PostgreSQL, диск заполнен на 95%, и надо понять, какая из баз съела место и где лежат настройки доступа. Путь к ответу всегда один: имя базы в консоли кластера 1С → каталог данных PostgreSQL → папка с номером базы → файлы postgresql.conf и pg_hba.conf.

Как 1С хранит данные в PostgreSQL

В клиент-серверном варианте 1С не пишет данные в свои файлы. Рабочие процессы кластера 1С передают запросы СУБД, а PostgreSQL раскладывает таблицы по своим файлам. Поэтому искать «файл базы» вроде 1Cv8.1CD бесполезно — его нет.

Что где находится на сервере:

  • 🗄️ Таблицы и индексы базы — в каталоге данных PostgreSQL, папка base/<OID>.
  • ⚙️ Настройки СУБД — postgresql.conf, доступ по сети — pg_hba.conf.
  • 📜 Журнал предзаписи (WAL) — папка pg_wal внутри каталога данных.
  • 🧩 Реестр кластера 1С (список баз, параметры подключения к СУБД) — каталог srvinfo сервера 1С, а не PostgreSQL.

Одна информационная база 1С — это одна база данных PostgreSQL. На одном экземпляре PostgreSQL обычно живут десятки баз 1С, и все они лежат в общем каталоге данных.

Внутри base/<OID> вы увидите сотни файлов с номерами вместо имён: 16385, 16391, 16391_fsm, 16391_vm. Каждая таблица и каждый индекс — отдельный файл (или несколько, если объект больше 1 ГБ: тогда появляются 16391.1, 16391.2). Имена таблиц 1С вида _Document123 или _AccRg456 здесь не видны — их связь с номерами файлов хранится в системном каталоге PostgreSQL.

Шаг 1. Узнаём имя базы данных в консоли кластера 1С

Имя информационной базы в списке пользователей 1С и имя базы данных в PostgreSQL могут не совпадать. Например, база «Бухгалтерия ООО Ромашка» в СУБД может называться buh_romashka или bp30_2021.

Где посмотреть соответствие:

  1. Откройте консоль «Администрирование серверов 1С Предприятия».
  2. Раскройте Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы.
  3. Откройте свойства нужной базы. Поля «Сервер баз данных», «Тип СУБД» и «База данных» покажут сервер PostgreSQL и точное имя базы данных.

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

rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac infobase info --cluster=<uuid-кластера> --infobase=<uuid-базы> \
  --infobase-user=Администратор --infobase-pwd=<пароль>

В выводе infobase info ищите строки db-server и db-name. Для чтения свойств нужен логин и пароль администратора информационной базы, если в ней заведены пользователи.

В поле «Сервер баз данных» может стоять другой хост или порт, например pgsrv:5433. Тогда база физически лежит на другой машине, и искать её на сервере 1С не нужно.

Шаг 2. Находим каталог данных PostgreSQL

Самый надёжный способ — спросить саму СУБД. Он одинаково работает в Linux и Windows и не зависит от того, кто и как ставил PostgreSQL.

Через psql

Подключитесь пользователем с правами суперпользователя (обычно postgres):

sudo -u postgres psql

В Windows запустите psql.exe из папки bin установленного PostgreSQL. Затем выполните:

SHOW data_directory;
SHOW config_file;
SHOW hba_file;
SHOW port;

Первая строка даёт каталог данных, вторая и третья — полные пути к postgresql.conf и pg_hba.conf. Проверка порта нужна, если на сервере несколько экземпляров PostgreSQL: тогда подключайтесь с ключом -p 5433 и повторяйте запросы для каждого.

Через процессы и службы, если в psql не войти

В Linux каталог виден в параметрах запуска главного процесса:

ps -ef | grep -E 'postgres.*-D'
systemctl status postgresql*

В строке процесса ищите ключ -D — после него идёт путь к каталогу данных. В Debian и Ubuntu есть ещё команда pg_lsclusters: она выводит версию, имя кластера PostgreSQL, порт, статус и путь к данным одной таблицей.

В Windows откройте services.msc, найдите службу PostgreSQL и откройте её свойства. В поле «Исполняемый файл» будет строка вида pg_ctl.exe runservice -N "postgresql-x64-15" -D "C:\Program Files\PostgreSQL\15\data". Путь после -D и есть каталог данных.

Где искать журнал PostgreSQL

Когда база 1С не открывается с ошибкой СУБД, подробности почти всегда есть в журнале сервера PostgreSQL. Его папку тоже показывает сама СУБД:

SHOW logging_collector;
SHOW log_directory;

Если logging_collector включён, относительный путь вроде log отсчитывается от каталога данных. В Debian и Ubuntu журналы по умолчанию пишутся в /var/log/postgresql/. В Windows ищите папку log внутри каталога данных. Ищите по времени ошибки: в строках журнала видно имя базы и пользователя, под которым подключался сервер 1С.

Где обычно лежат файлы базы: таблица путей

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

Сборка и ОСКаталог данныхГде postgresql.conf и pg_hba.conf
PostgreSQL из пакетов Debian/Ubuntu (в т. ч. сборка для 1С)/var/lib/postgresql/<версия>/main/etc/postgresql/<версия>/main/
PostgreSQL PGDG в RHEL, Rocky, AlmaLinux, РЕД ОС/var/lib/pgsql/<версия>/dataВ самом каталоге данных
Postgres Pro для 1С (Linux)/var/lib/pgpro/1c-<версия>/dataВ самом каталоге данных
PostgreSQL для Windows (стандартный установщик)C:\Program Files\PostgreSQL\<версия>\dataВ самом каталоге данных
Сборка PostgreSQL с патчами для 1С под WindowsПапка data внутри каталога установки, в имени которого есть версия и отметка 1CВ самом каталоге данных

Особенность Debian и Ubuntu: конфигурация вынесена в /etc/postgresql, а в /var/lib/postgresql/.../main лежат только данные. Многие ищут pg_hba.conf рядом с данными и не находят — он в /etc.

Шаг 3. Определяем папку конкретной базы и её размер

Когда каталог данных известен, найдите OID базы данных. Запрос в psql:

SELECT oid, datname,
       pg_size_pretty(pg_database_size(datname)) AS size
FROM pg_database
ORDER BY pg_database_size(datname) DESC;

Результат — список баз от самой большой к самой маленькой. Допустим, у buh_romashka OID равен 16384. Тогда её файлы лежат в <data_directory>/base/16384.

Проверить на диске:

sudo du -sh /var/lib/postgresql/15/main/base/16384
sudo du -sh /var/lib/postgresql/15/main/pg_wal

Размер папки и результат pg_database_size почти совпадут. Если папка pg_wal весит десятки гигабайт, место съедает не база, а журнал — обычно из-за неработающей архивации WAL или забытого слота репликации.

Если база вынесена в отдельное табличное пространство

Часто крупную базу кладут на отдельный быстрый диск через табличное пространство (tablespace). Тогда в base/<OID> её не будет — данные окажутся в другом месте. Проверка:

SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace;
SELECT datname, dattablespace FROM pg_database;

Пустой путь у pg_default и pg_global — норма: это сам каталог данных. Для остальных пространств запрос покажет реальную папку, например /mnt/ssd/pg_tbs. В каталоге данных на неё ведёт символическая ссылка из папки pg_tblspc.

Какой файл — какая таблица 1С

Сопоставить номер файла с таблицей PostgreSQL можно функцией pg_relation_filepath:

\c buh_romashka
SELECT relname, pg_relation_filepath(oid),
       pg_size_pretty(pg_total_relation_size(oid))
FROM pg_class
WHERE relkind = 'r'
ORDER BY pg_total_relation_size(oid) DESC
LIMIT 10;

Вы получите десять самых тяжёлых таблиц с именами вида _accrg1234 или _inforg5678. Чтобы понять, какой это регистр или документ в конфигурации, вызовите в 1С метод ПолучитьСтруктуруХраненияБазыДанных() — он возвращает соответствие объектов метаданных и имён таблиц. Обычно его запускают из внешней обработки или консоли кода.

Шаг 4. Настраиваем pg_hba.conf и postgresql.conf для сервера 1С

Файлы нашли — теперь о том, зачем их обычно ищут.

pg_hba.conf: кто может подключиться

Сервер 1С подключается к PostgreSQL по сети, даже если обе службы стоят на одной машине и адрес localhost. Если в pg_hba.conf нет подходящей строки, при создании или открытии базы появится ошибка с текстом no pg_hba.conf entry for host.

Пример строк для сервера 1С с адресом 10.0.0.15:

# TYPE  DATABASE  USER      ADDRESS        METHOD
host    all       postgres  127.0.0.1/32   scram-sha-256
host    all       postgres  10.0.0.15/32   scram-sha-256

Метод scram-sha-256 — современный вариант проверки пароля. На старых установках встречается md5. Метод trust пускает без пароля — на рабочем сервере trust не оставляйте, это открытая дверь ко всем базам.

После правки перечитайте конфигурацию без перезапуска службы:

SELECT pg_reload_conf();

Или командой systemctl reload postgresql в Linux. Перечитывание не обрывает сеансы пользователей 1С.

postgresql.conf: где слушать и сколько памяти

В postgresql.conf для связки с 1С чаще всего проверяют:

  • 🌐 listen_addresses — на каких адресах СУБД принимает подключения. Если сервер 1С на другой машине, localhost не подойдёт.
  • 🔌 port — по умолчанию 5432.
  • 🧠 shared_buffers, work_mem, effective_cache_size — параметры памяти.
  • 📁 data_directory — в Debian и Ubuntu задаёт, где лежат данные, раз конфигурация отдельно.

Изменение listen_addresses, port и shared_buffers вступает в силу только после перезапуска PostgreSQL. Перезапуск оборвёт все сеансы 1С на этом сервере — делайте его вне рабочего времени и предупредите пользователей.

Как перенести базу 1С на другой диск

Частая причина поиска — диск заканчивается. Не копируйте папку base/<OID> одной базы на другой сервер или в другой каталог данных — PostgreSQL не подхватит её отдельно от остальных служебных файлов, и база не откроется.

Рабочие варианты:

СпособКогда подходитЧто учесть
Перенос всего каталога данныхВесь PostgreSQL переезжает на новый дискОстановка СУБД, все базы недоступны на время копирования
Отдельное табличное пространствоНужно вынести одну крупную базуALTER DATABASE ... SET TABLESPACE требует, чтобы к базе никто не был подключён
Выгрузка .dt или pg_dump и загрузка зановоПереезд на другой серверВремя простоя зависит от размера базы

Перенос всего каталога в общих чертах:

  1. Сделайте резервную копию: pg_dump нужных баз или выгрузку .dt из конфигуратора.
  2. Запретите вход в базы и остановите службу PostgreSQL.
  3. Скопируйте каталог данных с сохранением прав и владельца, например rsync -a.
  4. Укажите новый путь: в Debian и Ubuntu — параметр data_directory в postgresql.conf, в RHEL — переменную PGDATA в настройках службы systemd, в Windows — ключ -D службы (её проще перерегистрировать через pg_ctl unregister и pg_ctl register).
  5. Запустите службу и выполните SHOW data_directory; — путь должен быть новым.
  6. Откройте базу в 1С и проверьте пару отчётов. Старый каталог удаляйте через несколько дней, когда убедитесь, что всё работает.
Перед переносом каталога данных
Выполнено: 0 / 5

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

Можно ли скопировать файлы базы 1С из PostgreSQL как резервную копию?
Только при остановленной СУБД и только весь каталог данных целиком. Для ежедневных копий надёжнее pg_dump или выгрузка .dt: их можно развернуть на другом сервере.
Почему в папке base нет файла с названием моей базы?
PostgreSQL называет папки баз по OID, а файлы таблиц — по внутренним номерам. Соответствие имени и номера даёт запрос к pg_database.
Где хранится список баз сервера 1С?
В реестре кластера, в каталоге srvinfo. В Linux по умолчанию это /home/usr1cv8/.1cv8/1C/1cv8, в Windows — папка srvinfo в каталоге установки 1С. Данных учёта там нет.
Что лежит в папке srvinfo в подкаталоге с GUID базы?
Служебные файлы сеансов и кэши кластера 1С. Это не данные учёта, их размер обычно невелик, и бизнес-информации там нет.
Как узнать, какая версия PostgreSQL установлена?
Запрос SELECT version(); в psql. Номер версии часто виден и в самом пути к каталогу данных, например 15 в /var/lib/postgresql/15/main.