PostgreSQL, Qt, Базы данных

Путь к каталогу bin PostgreSQL Windows

Задача: получить значение пути к каталогу бинарников сервера — к каталогу bin. Путь к каталогу data, как и прочие значения параметров времени выполнения, найти совершенно несложно: достаточно выполнить запрос show, воспользоваться функцией current_setting() или обратиться к представлению pg_settings:

show data_directory;
select current_setting('data_directory');
select setting from pg_settings 
   where name = 'data_directory';
Три равнозначных примера получения значения пути к каталогу data

Еще парочку примеров показывала вот в этой записи: Количество подключений к БД PostgreSQL.

С значением пути к каталогу bin не все так просто — запросом его не получишь. Но можно узнать из реестра. В реестре не хранится чистый ключ со значением пути к каталогу, к сожалению, но можно узнать путь к исполняемому файлу службы сервера.

Итак, интересующий нас ключ:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\postgresql-xxxx\ImagePath:

Ключ реестра путь к исполняемому файлу службы Postgresql
Далее необходимо «вычленить» именно путь к каталогу. В Qt делаю так:

QString myClass::postgresBinDirectory()
{
    QSettings settings(
                "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services",
                QSettings::NativeFormat);
    QStringList forks = settings.allKeys();
    QString postgresKey;
    for(const auto &fork: forks)
        if (fork.contains("postgresql", Qt::CaseInsensitive) &&
                fork.contains("ImagePath", Qt::CaseInsensitive)) {
            postgresKey = fork;
            break;
        }
    QString execFilePath = settings.value(postgresKey).toString();
	//строка начинается с двойных кавычек, 
	//поэтому берем с 1-го символа
    return execFilePath.mid(1, execFilePath.indexOf("bin")+2);
}

Путь к каталогу bin PostgreSQL Windows: 1 комментарий

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.