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

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

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

[pastacode lang=»sql» manual=»show%20data_directory%3B%0Aselect%20current_setting(‘data_directory’)%3B%0Aselect%20setting%20from%20pg_settings%20%0A%20%20%20where%20name%20%3D%20’data_directory’%3B» message=»Три равнозначных примера получения значения пути к каталогу data» highlight=»» provider=»manual»/]

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

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

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

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

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

[pastacode lang=»cpp» manual=»QString%20myClass%3A%3ApostgresBinDirectory()%0A%7B%0A%20%20%20%20QSettings%20settings(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22HKEY_LOCAL_MACHINE%5C%5CSYSTEM%5C%5CCurrentControlSet%5C%5Cservices%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20QSettings%3A%3ANativeFormat)%3B%0A%20%20%20%20QStringList%20forks%20%3D%20settings.allKeys()%3B%0A%20%20%20%20QString%20postgresKey%3B%0A%20%20%20%20for(const%20auto%20%26fork%3A%20forks)%0A%20%20%20%20%20%20%20%20if%20(fork.contains(%22postgresql%22%2C%20Qt%3A%3ACaseInsensitive)%20%26%26%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fork.contains(%22ImagePath%22%2C%20Qt%3A%3ACaseInsensitive))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20postgresKey%20%3D%20fork%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20QString%20execFilePath%20%3D%20settings.value(postgresKey).toString()%3B%0A%09%2F%2F%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0%20%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D1%81%20%D0%B4%D0%B2%D0%BE%D0%B9%D0%BD%D1%8B%D1%85%20%D0%BA%D0%B0%D0%B2%D1%8B%D1%87%D0%B5%D0%BA%2C%20%0A%09%2F%2F%D0%BF%D0%BE%D1%8D%D1%82%D0%BE%D0%BC%D1%83%20%D0%B1%D0%B5%D1%80%D0%B5%D0%BC%20%D1%81%201-%D0%B3%D0%BE%20%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B0%0A%20%20%20%20return%20execFilePath.mid(1%2C%20execFilePath.indexOf(%22bin%22)%2B2)%3B%0A%7D» message=»» highlight=»» provider=»manual»/]

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

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

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