From PostgreSQL wiki
Jump to navigationJump to search

Запуск PostgreSQL в Windows без установки

This is a question that comes up quite often by windows users, so thought we would share how we normally do it. The question is can you run a PostgreSQL server on your windows desktop/server box without having to install anything? The answer is yes and quite easily. Why would you need to do this. There are a couple of cases -- one you are developing a single user app that you want users to be able to run from anywhere without having to install it first. The other common reason is, you aren't allowed to install anything on a user's pc and you also want to package along a database you already have created.

Этот вопрос довольно часто задают пользователи Windows. Вопрос в том, можете ли вы запустить сервер PostgreSQL на вашей desktop/server системе Windows без необходимости что-нибудь устанавливать? Ответ - Да, и это делается довольно легко. Зачем это нужно делать? Есть несколько случаев, - тот, который вы разрабатываете одно приложение пользователя, который вы хотите, чтобы пользователи могли запускать из любой точки мира без того, чтобы установить его. Другие распространённые причины, вы не можете ничего устанавливать на компьютер пользователя, и вы также хотите, чтобы пакет по базе данных вы уже создали.

For our purposes, many of our developers develop on portable WAMP like things, and for some of our applications, they need to work in both MySQL and PostgreSQL, so we need an easy way during development to swap one out for the other.

   Get binaries for Windows. You can either copy the postgresql folder (minus the data folder) from an existing PostgreSQL install, or just download the PostgreSQL binaries from PostgreSQL Windows. Make sure to choose the zip archive.
   Next copy the below batch file into the root of the postgresql folder
   For first time use, unremark out the (initdb step)
   Run the batch file

Below is the script that will start a PostgreSQL server and clicking the enter key will shut the service down. This is one we were using as part of a self-contained devleopment kit running PostgreSQL 9.0 beta. We chose to run on a non-standard port (5439 so we know its 9.0 server). To initialize the database for the first time, you will want to run the remarked out initdb line. You only need to run once. From then on you can carry the server on USB device if you want and launch as you wish. Clicking enter in the window will shut it down. The assumpution of the script is that its in the root of your unzipped PostgreSQL folder. The %CD% returns the folder path of current directory and %~dp0 returns folder path of script. UPDATE As Tom pointed out the original doesn't handle spaces and only works if you are double-clicking on the batch file. Better solution.

@ECHO ON REM The script sets environment variables helpful for PostgreSQL @SET PATH="%~dp0\bin";%PATH% @SET PGDATA=%~dp0\data @SET PGDATABASE=postgres @SET PGUSER=postgres @SET PGPORT=5439 @SET PGLOCALEDIR=%~dp0\share\locale REM "%~dp0\bin\initdb" -U postgres -A trust "%~dp0\bin\pg_ctl" -D "%~dp0/data" -l logfile start ECHO "Click enter to stop" pause "%~dp0\bin\pg_ctl" -D "%~dp0/data" stop

Original script

@ECHO ON REM The script sets environment variables helpful for PostgreSQL @SET PATH="%CD%\bin";%PATH% @SET PGDATA=%CD%\data @SET PGDATABASE=postgres @SET PGUSER=postgres @SET PGPORT=5439 @SET PGLOCALEDIR=%CD%\share\locale REM %CD%\bin\initdb -U postgres -A trust %CD%\bin\pg_ctl -D %CD%/data -l logfile start ECHO "Click enter to stop" pause %CD%\bin\pg_ctl -D %CD%/data stop