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

Описана минимальная настройка PostgreSQL на Windows без необходимости установки БД. Запускается через bat-файл. Может работать с флэшки или переносного жесткого диска.

Скачиваем бинарники для Windows

Идем на сайт PosgreSQL в раздел Download/Windows и кликаем по ссылке zip archive в абзаце для Advanced users. Выбираем нужную версию и вперед.

Файлы из архива извлекаем в желаемую директорию, например:
D:\psql

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

Bat-скрипт для запуска на Windows без установки:

@ECHO ON
@REM Set environment variables for PostgreSQL
@SET PATH="%CD%\bin";%PATH%
@SET PGDATA=%CD%\data
@SET PGDATABASE=postgres
@SET PGUSER=postgres
@SET PGPORT=5432
@REM Create new DB with Russian encoding only at first run
@rem %CD%\bin\initdb -U postgres -A trust -E UTF8 --locale=russian_russia
@REM Create new DB with English encoding only at first run
%CD%\bin\initdb -U postgres -A trust -E UTF8 --locale=american_usa
@%CD%\bin\pg_ctl -D %CD%/data -l logfile start
@ECHO Press Enter to stop server
@pause
@%CD%\bin\pg_ctl -D %CD%/data stop

Скрипт кладем в корень директории, где лежит PostgreSQL, например:
D:\psql\pg.bat

Обновление версии PostgreSQL

Если необходимо обновить версию PostgreSQL, то надо совершить несколько простых шагов. Скачать архив с новой версией, извлечь его в отдельную директорию и инициализировать БД. Описано выше.

Подробно перенос данных описан здесь. Если кратко, то необходимо запустить скрипт из директории bin новейшей версии:

cd D:\psql-new\bin

pg_upgrade.exe --username=postgres
--old-datadir "D:\pgsql-old\data"
--new-datadir "D:\pgsql-new\data"
--old-bindir "D:\pgsql-old\bin"
--new-bindir "D:\pgsql-new\bin"

Меняем локаль у PostgreSQL

Если не нравятся переведенные сообщения и интерфейс pgAdmin3, то необходимо установить нужную кодировку базы данных при первом запуске.

Однако в Windows установка кодировки отличной от системной является загадкой, которую придется решить. Стандартные названия кодировок система не понимает, а которые понимает не так просто найти.

Для установки кодировки «en_US.UTF-8» необходимо инициализировать бд с локалью «american_usa» командой:
initdb -U postgres -A trust -E UTF8 --locale=american_usa

Для установки кодировки «ru_RU.UTF-8» необходимо инициализировать бд с локалью «russian_russia» командой:
initdb -U postgres -A trust -E UTF8 --locale=russian_russia

Для других кодировок необходимо подбирать сочетания самостоятельно, используя следующие источники на MSDN:

Полезные команды

Ниже представлены SQL-запросы, которые необходимо вводить через командную строку PostgreSQL. Запускаем командой:
D:\pgsql\bin\psql --username=postgres

Или через графический интерфейс pgAdmin3:
D:\pgsql\bin\pgAdmin3.exe

Проверка версии:
select version();

Текущие процессы:
SELECT datname,pid,query FROM pg_stat_activity;

Создание базы данных:
CREATE DATABASE test_database;

Создание и изменение пользователя:
CREATE USER developer WITH password '123456';
ALTER USER developer WITH password '654321';

Сделать суперпользователем:
ALTER ROLE developer SUPERUSER;

Права пользователя:
GRANT ALL privileges ON DATABASE test_database TO developer;

Импорт из дампа:
gunzip -c test_database.sql.gz | psql test_database

gunzip -c test_database.sql.gz | psql test_database -U user -h localhost

psql test_database test_user < dump_file.sql

Создание таблицы:

CREATE SEQUENCE post_ids; /* счетчик для индекса */
CREATE TABLE posts (
    id INTEGER PRIMARY KEY DEFAULT NEXTVAL('post_ids'),
    title CHAR(64),
    content TEXT
);

Добавление записи:
INSERT INTO posts (title, content) VALUES ('title', 'content');

Простой запрос:
SELECT * FROM posts;