В процессе работы возникла необходимость установить сервер БД PostgreSQL и работать с БД, предоставленной сторонней компанией.
Эта БД, как выяснилось, работает с сервером postgresql-9.4. Именно этот сервер я и пытался установить.
В качестве утилиты администрирования — pgAdmin 3-1.22.2.
Так как БД представляет собой директорий "data" (с вложенными поддиректориями и файлами) — то первый вопрос:
Как настроить сервер, установленный в ОС Windows 10 Pro, на работу с данным каталогом?
Так, предположим, что база у меня в папке C:\TEMP\ttt\data — как "скормить" этот путь серверу?
Как проверить, с каким каталогом данных работает в данный момент сервер?
Так, например, файл pg_env.bat (в каталоге сервера)
имеет строку:
@SET PGDATA=C:\TEMP\ttt\data
Но проблема этим НЕ решается
Как правильно прописать путь к "data" и проконтролировать, что новый путь вступил в силу?
Здравствуйте, AlexGin, Вы писали:
AG>Дрброе время суток, уважаемые коллеги!
AG>В процессе работы возникла необходимость установить сервер БД PostgreSQL и работать с БД, предоставленной сторонней компанией. AG>Эта БД, как выяснилось, работает с сервером postgresql-9.4. Именно этот сервер я и пытался установить. AG>В качестве утилиты администрирования — pgAdmin 3-1.22.2. AG>Так как БД представляет собой директорий "data" (с вложенными поддиректориями и файлами) — то первый вопрос: AG>Как настроить сервер, установленный в ОС Windows 10 Pro, на работу с данным каталогом?
Наверное, так в теории возможно, но вроде правильный путь это pg_dump + pg_restore (или как-то так). Что-то мешает так сделать?
AG>Так, предположим, что база у меня в папке C:\TEMP\ttt\data — как "скормить" этот путь серверу? AG>Как проверить, с каким каталогом данных работает в данный момент сервер? AG>Так, например, файл pg_env.bat (в каталоге сервера) AG>имеет строку: AG>
AG> @SET PGDATA=C:\TEMP\ttt\data
AG>
AG>Но проблема этим НЕ решается AG>Как правильно прописать путь к "data" и проконтролировать, что новый путь вступил в силу?
Можно еще посмотреть PGDATA в конфигах или параметрах запуска и их приоритеты.
AG>Второй вопрос (так как каталог "data" имеется, а пароль — нет): установка работы без пароля — судя по описанному здесь: AG>https://stackoverflow.com/questions/18587710/change-reset-postgresql-user-password-on-windows-7 AG>- установить опцию "trust" в файле pg_hba.conf в каталоге "data"? Верно?
Вроде этот файл отвечает за аутентификацию клиентов. Пароля к "файлам БД" у постргреса нет, за разграничения прав доступа на этом уровне отвечает ОС.
AG>И наконец, такой вот вопрос: если у прежнего пользователя БД она работала с сервером Win32 (x86), могу ли я AG>запустить под сервером x64 или нет?
AG>Заранее благодарен за любые советы!
Пожалуйста.
Здравствуйте, уважаемый Skorodum, Вы писали:
S>Наверное, так в теории возможно, но вроде правильный путь это pg_dump + pg_restore (или как-то так). Что-то мешает так сделать?
Попробую покопать в этом направлении, возможно это и даст что-то полезное.
Спасибо, поищу всё по PGDATA.
S>Вроде этот файл отвечает за аутентификацию клиентов. Пароля к "файлам БД" у постргреса нет, за разграничения прав доступа на этом уровне отвечает ОС.
Но, тем не менее, если я хочу просматривать БД при помощи утилиты pgAdmin, мне понадобится установить опцию "trust" в файле pg_hba.conf примерно так:
# TYPE DATABASE USER ADDRESS METHOD
host all all ::1/128 trust
host all all 127.0.0.1/32 trust
Здравствуйте, AlexGin, Вы писали:
AG>Так как БД представляет собой директорий "data" (с вложенными поддиректориями и файлами) — то первый вопрос:
Нормальные люди экспортируют/импортируют базу через pg_dump/pg_restore.
AG>Как настроить сервер, установленный в ОС Windows 10 Pro, на работу с данным каталогом?
Я думаю тебе проше будет сделать так:
1. Штатно устанавливаешь PostgreSQL её инсталятором.
2. Выполняешь первый запуск.
3. Останавливаешь сервер СУБД.
4. В директории куда установил СУБД папку data меняешь на свою директорию (старую Data переименовываешь, новую копируешь на её место).
5. Сравниваешь права ntfs старой и новой data — и делаешь у новой такие же, как у сделанной инсталятором.
6. Штатно запускаешь СУБД.
Если версии сервера СУБД и его разрядность (32/64 — обрати внимание) идентичны тому, где твоя папка была раньше — все заработает.
AG>Так, предположим, что база у меня в папке C:\TEMP\ttt\data — как "скормить" этот путь серверу?
Указать путь при сборке из исходников, указать переменную окружения PGDATA, указать в файле postgresql.conf или через параметр командной строки -D
AG>Как проверить, с каким каталогом данных работает в данный момент сервер?
Использовать pgsql — подконектится к работающему экземпляру СУБД и выполнить SQL запрос:
SHOW data_directory;
AG>Как правильно прописать путь к "data" и проконтролировать, что новый путь вступил в силу?
Замени своим каталогом уже существующий. Чё мучатся то?
AG>Второй вопрос (так как каталог "data" имеется, а пароль — нет): установка работы без пароля — судя по описанному здесь: AG>https://stackoverflow.com/questions/18587710/change-reset-postgresql-user-password-on-windows-7 AG>- установить опцию "trust" в файле pg_hba.conf в каталоге "data"? Верно?
Да, все верно.
AG>И наконец, такой вот вопрос: если у прежнего пользователя БД она работала с сервером Win32 (x86), могу ли я AG>запустить под сервером x64 или нет?
Конечно. Сначала запускаешь под x86 туже версию. Делаешь для базы данных pg_dump. Сносишь все это, ставишь x64 (можно версию поновее/старее) и выполняешь pg_restore.
Я может и путаю, но мне казалось у postgres-а журналы тоже сильно завязаны на архитектуру.
Здравствуйте, AlexGin, Вы писали:
AG>Заранее благодарен за любые советы!
Я бы сделал бэкап базы, поставил нужный сервер, и восстановился из бэкапа, избавившись от кучи ненужных приседаний. Собственно, это и в руководстве рекомендуется, поскольку сами файлы БД в общем случае не переносимы между версиями.
Заодно, вероятно, сможешь взять сервер посвежее, там со времен 9.4 многое наоптимизировали, а совместимость вроде сильно не ломали.
А путь к каталогу под виндой смотри в HKLM\SYSTEM\CurrentControlSet\Services\postgresql*****\ImagePath где ***** могут отличаться по версиям постгри
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Если чуть шаришь в линуксе, я настоятельно порекомендую поставить тот линукс, который стоит у товарищей, которые дали тебе базу в виртуалку и запустить базу там. Вероятно это будет проще.
Здравствуйте, AlexGin, Вы писали:
AG>Заранее благодарен за любые советы!
Вы бы описали ситуацию более детально — что за сторонняя программа, почему 9.4, что от вас требуется, какой результат работы ожидается. А то, я вижу, вам тут уже линуксы советуют, а между тем постгрес замечательно работает на виндах, ставится штатным инсталлятором, админится штатной админкой и так далее.
Здравствуйте, AlexGin, Вы писали:
AG>Вот, кстати, нашел некоторые рекомендации по данному вопросу: AG>https://stackoverflow.com/questions/36629963/how-to-start-postgresql-on-windows AG>там рекомендуют делать через pg_ctl.exe — это правильно?
Похоже на правду (но я это делал последний раз лет 7 назад и в основном на линухе).
AG>Насчёт pg_restore — я нашёл такую информацию: AG>https://stackoverflow.com/questions/2732474/restore-a-postgres-backup-file-using-the-command-line AG>как я понимаю, это альтернатива работе с "сырым" каталогом "data", причём более цывилизованная. Я верно понял?
Так точно. Это единственный кошерный путь. ЕМНИП, гарантии в совместимости сырых данных на диске нет никаких.
S>>Вроде этот файл отвечает за аутентификацию клиентов. Пароля к "файлам БД" у постргреса нет, за разграничения прав доступа на этом уровне отвечает ОС. AG>Но, тем не менее, если я хочу просматривать БД при помощи утилиты pgAdmin, мне понадобится установить опцию "trust" в файле pg_hba.conf примерно так: AG>
AG># TYPE DATABASE USER ADDRESS METHOD
AG>host all all ::1/128 trust
AG>host all all 127.0.0.1/32 trust
AG>
Совершенно верно: это настройка аутентификации для клиентов, которые подключаются к серверу (hba это "host based authentification"), pgAdmin — клиент и вы говорите, что все клиенты, которые подключаются с локального хоста, могут делать что угодно даже без пароля.
Самому процессу постгреса никакой специальный пароль для доступа к БД не нужен, это все на совести администратора системы (тупо права на запись в папку).
AG>Спасибо за подсказки, уважаемый Skorodum!
Пожалуйста. Еще рекомендую не завязываться на pgAdmin, а стараться использовать CLI — он у постргреса очень продвинутый, с хорошим автодополнением, поэтому большинство пользователей им пользуется, легче найти ответ на вопросы.
Здравствуйте, уважаемый Skorodum, Вы писали:
S>Еще рекомендую не завязываться на pgAdmin...
Я не завязываюсь.
На одном из компов, где мне удалось (каким-то чудом) установить и запустить с нашей БД сервер PostgreSQL, я работаю с ним из моего C++ (Qt5) проекта.
Работаю — через ODBC драйвер (со стороны системы) и QODBC со стороны моего приложения.
Очень надеюсь, что благодаря Вашим советам, мне удасться успешно развернуть сервер PostgreSQL на всех компах, участвующих в эксперименте
S>...а стараться использовать CLI — он у постргреса очень продвинутый, с хорошим автодополнением, поэтому большинство пользователей им пользуется, легче найти ответ на вопросы.
Хорошо, постараюсь. Тем более, что непосредственной работы через Администратор — относительно мало, как я уже указывал выше.
Здравствуйте, vsb, Вы писали:
vsb>Если чуть шаришь в линуксе, я настоятельно порекомендую поставить тот линукс, который стоит у товарищей, которые дали тебе базу в виртуалку и запустить базу там. Вероятно это будет проще.
Шарю в линуксе на уровне пользователя, и даже компилирую мои творения в Ubuntu (которую держу и в dual-boot, и в виртуалке).
Но у тех товарищей, что предоставили нам БД, — на всех компах Windows 7
Встречный вопрос — в чём мне поможет Linux для данной стуации?
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, vsb, Вы писали:
vsb>>Если чуть шаришь в линуксе, я настоятельно порекомендую поставить тот линукс, который стоит у товарищей, которые дали тебе базу в виртуалку и запустить базу там. Вероятно это будет проще.
AG>Шарю в линуксе на уровне пользователя, и даже компилирую мои творения в Ubuntu (которую держу и в dual-boot, и в виртуалке). AG>Но у тех товарищей, что предоставили нам БД, — на всех компах Windows 7
Т.е. у них постгрес под виндой? Тогда беру совет назад обычно он под линуксом. А между вендой и линуксом фиг знает какие отличия в дата-файлах.
AG>Встречный вопрос — в чём мне поможет Linux для данной стуации?
Здравствуйте, Слава, Вы писали:
С>Вы бы описали ситуацию более детально — что за сторонняя программа, почему 9.4, что от вас требуется, какой результат работы ожидается.
Сторонняя программа очень узко-специализированная, разработанная под Windows (x86), несколько лет назад.
Там в БД — всё заточено именно под PostgreSQL 9.4 (попытки применить более новую версию — проваливаются).
От меня требуется — сделать своё приложение, работающее с этой самой БД, которое будет лучше имеющегося
С>А то, я вижу, вам тут уже линуксы советуют, а между тем постгрес замечательно работает на виндах, ставится штатным инсталлятором, админится штатной админкой и так далее.
Я в курсе данной ситуации. Насчёт линуксов — знаком с данной ОС и иногда использую её (Ubuntu 16).
Но пока, я не знаю, насколько она мне актуальна и полезна именно для данной задачи.
P.S. На мой взгляд — постгрес отвратительно работает — то есть: через пень колоду
Здравствуйте, AlexGin, Вы писали:
AG>На одном из компов, где мне удалось (каким-то чудом) установить и запустить с нашей БД сервер PostgreSQL
Ну значит dump/restore доступен и можно запускать везде и любые версии.
AG>я работаю с ним из моего C++ (Qt5) проекта. Работаю — через ODBC драйвер (со стороны системы) и QODBC со стороны моего приложения.
У Qt родной драйвер из коробки для PostgreSQL есть, я его всегда использовал. Про плюсы-минусы по сравнению с ODBC не скажу.
AG>Очень надеюсь, что благодаря Вашим советам, мне удасться успешно развернуть сервер PostgreSQL на всех компах, участвующих в эксперименте
Здравствуйте, Skorodum, Вы писали:
S>Ну значит dump/restore доступен и можно запускать везде и любые версии.
+100500
Похоже — что это самый правильный, для данной ситуации, вариант.
Но тем не менее, если товарищи опять передадут "сырую" (новую версию) БД, хотелось бы не очень долго "плясать с бубном"
S>У Qt родной драйвер из коробки для PostgreSQL есть, я его всегда использовал. Про плюсы-минусы по сравнению с ODBC не скажу.
Да, я в курсе, что есть родной драйвер.
Но (ИМХО) приимущество QODBC — если будет миграция БД на MS SQL Server, я обойдусь минимальными правками в коде.
В чем же приимущество "родного" PostgreSQL драйвера?
P.S. Насчёт кроссплатформенности проекта и работы под Linux — скорее всего НЕ актуально (актуально только Windows).
Здравствуйте, AlexGin, Вы писали:
AG>Да, я в курсе, что есть родной драйвер. AG>Но (ИМХО) приимущество QODBC — если будет миграция БД на MS SQL Server, я обойдусь минимальными правками в коде.
Если вы Qt-шными SQL-классами пользуетесь, то править вроде ничего и не надо будет (кроме подключения).
AG>В чем же приимущество "родного" PostgreSQL драйвера?
Не знаю, может скорость
AG>P.S. Насчёт кроссплатформенности проекта и работы под Linux — скорее всего НЕ актуально (актуально только Windows).
Тут может быть большой плюс в удобстве разработки: разворачивать постгрес в каком-нибудь докере или виртуальной машине — дело секунд.
Нужен скрипт на 3 строчки а-ля:
Здравствуйте, AlexGin, Вы писали:
AG>Там в БД — всё заточено именно под PostgreSQL 9.4 (попытки применить более новую версию — проваливаются).
Что за попытки? Через бэкап все должно отлично переноситься, там мало ломающих изменений. Разве что тупой клиент может отказываться работать со старшей версией.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Каюсь, что попытки были через "сырой" директорий "data"
Ops>Через бэкап все должно отлично переноситься, там мало ломающих изменений. Разве что тупой клиент может отказываться работать со старшей версией.
Обязательно попробую!
Сообщу здесь — о результате.
P.S. Я так понимаю, что если идёт на версии 9.4, то вроде как должно работать и на 9.6; 10; 11? Или это только в теории?
Здравствуйте, AlexGin, Вы писали:
AG>Сторонняя программа очень узко-специализированная, разработанная под Windows (x86), несколько лет назад. AG>Там в БД — всё заточено именно под PostgreSQL 9.4 (попытки применить более новую версию — проваливаются). AG>От меня требуется — сделать своё приложение, работающее с этой самой БД, которое будет лучше имеющегося
Скорей не в заточке дело, а в холодных бэкапах. У Postgresql каталог данных железно завязан на версию ПО, у остальных СУБД с этим проще.
Т.е. если ты саму базу перенесешь через pg_dump/pg_restore — скорей всего все заработает на новой версии.
С самим переносом могут быть небольшие сложности — но это будет всякая мелочь, которую по текстам ошибок можно будет быстро подправить. Но более вероятно — все перенесется без ошибок.
С>>А то, я вижу, вам тут уже линуксы советуют, а между тем постгрес замечательно работает на виндах, ставится штатным инсталлятором, админится штатной админкой и так далее.
AG>Я в курсе данной ситуации. Насчёт линуксов — знаком с данной ОС и иногда использую её (Ubuntu 16). AG>Но пока, я не знаю, насколько она мне актуальна и полезна именно для данной задачи.
Я в целом не сторонник применения PostgreSQL под Windows — именно на ней лучше MS SQL Server/Oracle/SQLite/MySQL.
Но в целом это именно порт, т.е. по функциональности он неотличим от Linux версии. Просто могут быть мелкие косяки — вроде сложностей с кодировками.
И напомню про бэкапы базы)) Самолично с фейлами постргреса не сталкивался — у нас на Linux он работает очень хорошо, всем довольны. А вот у коллег были data corruped, которые ещё и не сразу обнаруживались.
Здравствуйте, уважаемый Skorodum, Вы писали:
S>Если вы Qt-шными SQL-классами пользуетесь, то править вроде ничего и не надо будет (кроме подключения).
+100500
Выделенное — совершенно верно.
S>Не знаю, может скорость
Скорость — в смысле за счёт ухода от промежуточного слоя ODBC подсистемы?
S>Тут может быть большой плюс в удобстве разработки: разворачивать постгрес в каком-нибудь докере или виртуальной машине — дело секунд. S>Нужен скрипт на 3 строчки а-ля: S>
Здравствуйте, AlexGin, Вы писали:
AG>P.S. Я так понимаю, что если идёт на версии 9.4, то вроде как должно работать и на 9.6; 10; 11? Или это только в теории?
В теории. На практике я пока не сталкивался, чтобы не работало. Но есть еще 1 момент: бывает софт, который требует конкретную версию или их диапазон, и не хочет работать со старшими. Иногда это частично обосновано, как в упомянутом тобой pgAdmin3, который работает в т.ч. с кишками базы (сейчас 4-й допилили до работоспособного уровня, он поддерживает все современные версии), но иногда это просто вахтеризм разработчиков того софта.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.