Как найти файлы информационной базы 1С на сервере PostgreSQL
Содержание
База 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С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы. - Откройте свойства нужной базы. Поля «Сервер баз данных», «Тип СУБД» и «База данных» покажут сервер 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 и загрузка заново | Переезд на другой сервер | Время простоя зависит от размера базы |
Перенос всего каталога в общих чертах:
- Сделайте резервную копию:
pg_dumpнужных баз или выгрузку.dtиз конфигуратора. - Запретите вход в базы и остановите службу PostgreSQL.
- Скопируйте каталог данных с сохранением прав и владельца, например
rsync -a. - Укажите новый путь: в Debian и Ubuntu — параметр
data_directoryвpostgresql.conf, в RHEL — переменнуюPGDATAв настройках службы systemd, в Windows — ключ-Dслужбы (её проще перерегистрировать черезpg_ctl unregisterиpg_ctl register). - Запустите службу и выполните
SHOW data_directory;— путь должен быть новым. - Откройте базу в 1С и проверьте пару отчётов. Старый каталог удаляйте через несколько дней, когда убедитесь, что всё работает.
Частые вопросы
Можно ли скопировать файлы базы 1С из PostgreSQL как резервную копию?
pg_dump или выгрузка .dt: их можно развернуть на другом сервере.Почему в папке base нет файла с названием моей базы?
pg_database.Где хранится список баз сервера 1С?
srvinfo. В Linux по умолчанию это /home/usr1cv8/.1cv8/1C/1cv8, в Windows — папка srvinfo в каталоге установки 1С. Данных учёта там нет.Что лежит в папке srvinfo в подкаталоге с GUID базы?
Как узнать, какая версия PostgreSQL установлена?
SELECT version(); в psql. Номер версии часто виден и в самом пути к каталогу данных, например 15 в /var/lib/postgresql/15/main.