PostgreSQL — это бесплатная объектно-реляционная СУБД с мощным функционалом, который позволяет конкурировать с платными базами данных, такими как Microsoft SQL, Oracle. PostgreSQL поддерживает пользовательские данные, функции, операции, домены и индексы. В данной статье мы рассмотрим установку и краткий обзор по управлению базой данных PostgreSQL. Мы установим СУБД PostgreSQL в Windows 10, создадим новую базу, добавим в неё таблицы и настроим доступа для пользователей. Также мы рассмотрим основы управления PostgreSQL с помощью SQL shell и визуальной системы управления PgAdmin. Надеюсь эта статья станет хорошей отправной точкой для обучения работы с PostgreSQL и использованию ее в разработке и тестовых проектах.
Установка PostgreSQL 11 в Windows 10
Для установки PostgreSQL перейдите на сайт https://www.postgresql.org и скачайте последнюю версию дистрибутива для Windows, на сегодняшний день это версия PostgreSQL 11 (в 11 версии PostgreSQL поддерживаются только 64-х битные редакции Windows). После загрузки запустите инсталлятор.
В процессе установки установите галочки на пунктах:
- PostgreSQL Server – сам сервер СУБД
- PgAdmin 4 – визуальный редактор SQL
- Stack Builder – дополнительные инструменты для разработки (возможно вам они понадобятся в будущем)
- Command Line Tools – инструменты командной строки
Установите пароль для пользователя postgres (он создается по умолчанию и имеет права суперпользователя).
По умолчание СУБД слушает на порту 5432, который нужно будет добавить в исключения в правилах фаерволла.
Нажимаете Далее, Далее, на этом установка PostgreSQL завершена.
Доступ к PostgreSQL по сети, правила файерволла
Чтобы разрешить сетевой доступ к вашему экземпляру PostgreSQL с других компьютеров, вам нужно создать правила в файерволе. Вы можете создать правило через командную строку или PowerShell.
Запустите командную строку от имени администратора. Введите команду:
netsh advfirewall firewall add rule name="Postgre Port" dir=in action=allow protocol=TCP localport=5432
- Где rule name – имя правила
- Localport – разрешенный порт
Либо вы можете создать правило, разрешающее TCP/IP доступ к экземпляру PostgreSQL на порту 5432 с помощью PowerShell:
New-NetFirewallRule -Name 'POSTGRESQL-In-TCP' -DisplayName 'PostgreSQL (TCP-In)' -Direction Inbound -Enabled True -Protocol TCP -LocalPort 5432
После применения команды в брандмауэре Windows появится новое разрешающее правило для порта Postgres.
Измените значение в пункте
port = 5432
. Перезапустите службу сервера postgresql-x64-11 после изменений. Можно перезапустить службу с помощью PowerShell:
Restart-Service -Name postgresql-x64-11
Более подробно о настройке параметров в конфигурационном файле postgresql.conf с помощью тюнеров смотрите в статье.
Утилиты управления PostgreSQL через командную строку
Рассмотрим управление и основные операции, которые можно выполнять с PostgreSQL через командную строку с помощью нескольких утилит. Основные инструменты управления PostgreSQL находятся в папке bin, потому все команды будем выполнять из данного каталога.
- Запустите командную строку.Совет. Перед запуском СУБД, смените кодировку для нормального отображения в русской Windows 10. В командной строке выполните:
chcp 1251
- Перейдите в каталог bin выполнив команду:
CD C:\Program Files\PostgreSQL\11\bin
Основные команды PostgreSQL:
- Проверка установленной версии СУБД:
psql –V
- Для создания новой базы данных воспользуйтесь утилитой createdb:
createdb -U postgres testdb
(где postgres суперпользователь, testdb новая база данных)Введите пароль суперпользователя. - Проверить список активных баз:
Psql -U postgres –l
(пароль) - С помощью инструмента createuser cоздадим нового пользователя:
createuser –U postgres operator
(где operator -имя нового пользователя) - Предоставим пользователю привилегии суперпользователя (на практике этого делать не надо). Запустите интерактивную командную оболочку управления PostgreSQL (shell):
psql –U postgres
. С помощью SQL команды ALTER ROLE предоставим нужные права нашему пользователю:ALTER ROLE operator SUPERUSER CREATEROLE CREATEDB;
. Мы предоставили пользователю права суперпользователя, права на создание ролей и баз данных. - Для выводы списка пользователей и ролей в СУБД выполните команду:
\du
PgAdmin: Визуальный редактор для PostgresSQL
Редактор PgAdmin служит для упрощения управления базой данных PostgresSQL в понятном визуальном режиме.
- Для запуска редактора запустите PgAdmin 4 в меню Пуск
- Для доступа нужно ввести пароль суперпользователя postgres
- В панели Servers вы можете раскрыть список активных БД.
- В панели управления возможно быстро создать нового пользователя и группу, предоставить ему права. Для этого Откройте меню Object -> Create -> Create Login/Group.
- Для создания новой базы данных достаточно выбрать: Database в меню Object -> Create. В новом поле указать имя базы и владельца.
По умолчанию все созданные базы хранятся в каталоге base по пути C:\Program Files\PostgreSQL\11\data\base.
Для каждой БД существует подкаталог внутри PGDATA/base, названный по OID базы данных в pg_database. Этот подкаталог по умолчанию является местом хранения файлов базы данных; в частности, там хранятся её системные каталоги. Каждая таблица и индекс хранятся в отдельном файле.
Для резервного копирования и восстановления лучше использовать инструмент Backup в панели инструментов Tools. Для автоматизации бэкапа PostgreSQL из командной строки используйте утилиту pg_dump.exe.
Query Tool: использование SQL запросов в PostgreSQL
Для написания SQL запросов в удобном графическом редакторе используется встроенный в pgAdmin инструмент Query Tool. Например, вы хотите создать новую таблицу в базе данных через инструмент Query Tool.
- Выберите базу данных, в панели Tools откройте Query Tool
- Создадим таблицу сотрудников:
CREATE TABLE employee
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(30),
LastName CHARACTER VARYING(30),
Email CHARACTER VARYING(30),
Age INTEGER
);
Id — номер сотрудника, которому присвоен ключ SERIAL. Данная строка будет хранить числовое значение 1, 2, 3 и т.д., которое для каждой новой строки будет автоматически увеличиваться на единицу. В следующих строках записаны имя, фамилия сотрудника и его электронный адрес, которые имеют тип CHARACTER VARYING(30), то есть представляют строку длиной не более 30 символов. В строке — Age записан возраст, имеет тип INTEGER, т.к. хранит числа.
После того, как написали код SQL запроса в Query Tool, нажмите клавишу F5 и в базе будет создана новая таблица employee.
Для заполнения полей в свойствах таблицы выберите таблицу employee в разделе Schemas -> Tables. Откройте меню Object инструмент View/Edit Data.
Здесь вы можете заполнить данные в таблице.
После заполнения данных выполним инструментом Query простой запрос на выборку:
select Age from employee;
Спасибо за статью!
Статья отличная!
Я все шаг за шагом сделал, но когда дошел до createdb -U postgres testdb у меня возникла ошибка :
createdb: ошибка: подключиться к серверу «localhost» (::1), порту 5432 не удалось: Connection refused (0x0000274D/10061)
Сервер действительно работает по данному адресу и принимает TCP-соединения?
подключиться к серверу «localhost» (127.0.0.1), порту 5432 не удалось: Connection refused (0x0000274D/10061)
Я запустил свой django проект на другой командной строке , т.е. localhost:5432, ошибко исчезла НО ничего и не выводится, т.е НИЧЕГО.
Я ждал пол часа у меня ничего не выводится
Хочу отметить что я устанавливал PostgreSQL 14 а не 11. В чем моя ошибка ответьте пожалуйста
а Илье никто не ответит? столкнулся с тем же — пытается подключиться по 6 протоколу ,вместо 4го.
соответственно — не работает.
Правильно ли я понял, что у вас проблема в том, что postgresql по умолчанию пытается использовать IPv6 адрес при резолвинге вместо ipv4?
Это стандартно поведение Windows, т.к. у протокола ipv6 больший приоритет в стеке. Чтобы сделать ipv4 более приоритетным:
netsh interface ipv6 set prefix ::/96 60 3
netsh interface ipv6 set prefix ::ffff:0:0/96 55 4
эти команды выполнялись, результата не дали. pgadmin к постгресу коннектится нормально, а вот из командлента — нет..
>
C:\Program Files\PostgreSQL 1C\14\bin>psql -V
Пароль пользователя postgres:
psql: ошибка: подключиться к серверу «localhost» (127.0.0.1), порту 5432 не удал
ось: FATAL: database «-V» does not exist
C:\Program Files\PostgreSQL 1C\14\bin>psql -V
Пароль пользователя postgres:
psql: ошибка: подключиться к серверу «localhost» (127.0.0.1), порту 5432 не удал
ось: FATAL: database «-V» does not exist
C:\Program Files\PostgreSQL 1C\14\bin>Psql -U postgres -l
Пароль пользователя postgres:
Psql: ошибка: подключиться к серверу «localhost» (127.0.0.1), порту 5432 не удал
ось: FATAL: database «-l» does not exist
C:\Program Files\PostgreSQL 1C\14\bin>
но порт слушается нормально:
C:\Program Files\PostgreSQL 1C\14\bin>netstat -an | FIND «5432»
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING
TCP 192.168.0.110:5432 192.168.0.105:59340 ESTABLISHED
TCP [::]:5432 [::]:0 LISTENING
C:\Program Files\PostgreSQL 1C\14\bin>
Посмотрите на каких адресах разрешены подключения в файле postgresql.conf (C:\Program Files\PostgreSQL 1C\14\bin\data)
Что указано в
listen_addresses
?Попробуйте
listen_addresses = '*'
и перезапуск службыЗатем проверьте разрешенные удаленные подключения в pg_hba.conf:
host all...
listen_addresses = ‘*’ так и стоит
pgadmin с локального сервера и с удалённого сервера коннектится нормально, а вот psql — нет..
Спасибо, очень помогло!
Подсказка: для всех тех кто работает в Powershell в начале команды приписываем «.\» . Пример: «.\psql -V»
Спасибо!
Благодарю Вас за помощь.
Вы можете сказать, почему PostgreSQL по Window Server работает гораздо быстрее чем под Window 10? Как оптимизировать настройку?
Из собственного опыта, работал сервер PostgreSQL под Windows 10 на железе i7-8700K, 32Gb. Получилось так, что на это железо был установлен Windows Server 2016 и PostgreSQL с теми же настройками стал обслуживать базу в 2-3 раза быстрее в аналогичных задачах.
Более того, аналогичные задачи выполняются под Windows 11 на железе i9-12700k 64Gb и как не странно он уступает в производительности на старой машине под Windows Server 2016.
Буду очень благодарен, если найдется объяснение.
Как вариант — попробовать включить схему электропитания «Высокая производительность». но не думаю что только она одна дает 2 кратный прирост.
Спасибо, помогло!
подождите 2 минуты и все заработает
Спасибо. Сейчас 15 версия, можно поменять путь. Для старта статья великолепная. Спасибо, автор!
Добрый день. А как обновить базу? Например с версии 9 на 10? Есть какая-то инструкция для винды
Шикардос. Спасибо автору
Поблагодарим автора за труды!
Однако, смысл затраченных трудов для меня не ясен. Никакой целесообразности связки Postgres и Windows я не вижу. Даже 1С уже, как 2 года назад от такой связки отказалась!!!
Перефразируя профессора Преображенского: «только недорезанные импортозамещением разрабы, холодным Windows закусывают . Мало-мальски уважающий себя человек оперирует закусками горячими, т.е. LINUX!!!»