PostgreSQL — самая популярная реляционная СУБД с открытым исходным кодом. Используется от стартапов до корпораций. Вот с чего начать.
Почему PostgreSQL
- Бесплатный и открытый — без лицензий и ограничений
- Полнофункциональный — оконные функции, JSON, полнотекстовый поиск, геоданные
- Стандарт на рынке — Яндекс, Сбер, Avito, большинство стартапов
- Активное развитие — новая версия каждый год
- Строгий — не прощает ошибок в SQL (в отличие от MySQL с мягкими настройками)
Установка
Mac (Homebrew)
brew install postgresql@16
brew services start postgresql@16
Ubuntu/Debian
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
Windows
Скачать установщик с postgresql.org → Next → Next → готово.
Docker (рекомендуется для учёбы)
docker run --name postgres-dev \
-e POSTGRES_PASSWORD=secret \
-p 5432:5432 \
-d postgres:16
Подключение
# Через psql (терминал)
psql -U postgres
psql -U postgres -d mydb -h localhost
# Создать базу
createdb mydb
Для графического интерфейса: DBeaver (бесплатный), TablePlus, pgAdmin (встроен в установщик).
Первые команды в psql
-- Список баз данных
\l
-- Подключиться к базе
\c mydb
-- Список таблиц
\dt
-- Структура таблицы
\d users
-- Выйти
\q
Создание таблицы
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE NOT NULL,
age INTEGER CHECK (age >= 0 AND age <= 150),
city VARCHAR(100),
created_at TIMESTAMP DEFAULT NOW()
);
Основные типы данных
| Тип | Использование |
|---|---|
| INTEGER, BIGINT | Целые числа |
| DECIMAL(p,s), NUMERIC | Точные дроби (деньги) |
| REAL, DOUBLE PRECISION | Плавающая точка |
| VARCHAR(n) | Строка до n символов |
| TEXT | Строка любой длины |
| BOOLEAN | true / false |
| DATE | 2024-03-15 |
| TIMESTAMP | 2024-03-15 14:30:00 |
| TIMESTAMPTZ | Timestamp с часовым поясом |
| UUID | Уникальный идентификатор |
| JSONB | JSON (бинарный, с индексами) |
| SERIAL | Автоинкремент (INT + sequence) |
CRUD-операции
-- Добавить данные
INSERT INTO users (name, email, city)
VALUES ('Анна', 'anna@mail.ru', 'Москва');
-- Добавить несколько строк
INSERT INTO users (name, email, city) VALUES
('Иван', 'ivan@gmail.com', 'СПб'),
('Мария', 'maria@yandex.ru', 'Москва');
-- Читать данные
SELECT * FROM users WHERE city = 'Москва';
-- Обновить данные
UPDATE users SET city = 'Казань' WHERE id = 1;
-- Удалить строку
DELETE FROM users WHERE id = 3;
Полезные функции PostgreSQL
-- Текущая дата/время
SELECT NOW(), CURRENT_DATE, CURRENT_TIMESTAMP;
-- Генерация UUID
SELECT gen_random_uuid();
-- Работа с JSON
SELECT data->>'name' FROM events WHERE data->>'type' = 'click';
-- Полнотекстовый поиск
SELECT * FROM articles WHERE to_tsvector('russian', content) @@ to_tsquery('sql & запрос');
Права доступа
-- Создать пользователя
CREATE USER myapp WITH PASSWORD 'secret';
-- Дать права на базу
GRANT ALL PRIVILEGES ON DATABASE mydb TO myapp;
-- Дать права на таблицы
GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO myapp;
Следующие шаги
После освоения базы:
- Индексы — CREATE INDEX, EXPLAIN ANALYZE
- Транзакции — BEGIN, COMMIT, ROLLBACK
- Оконные функции — ROW_NUMBER, RANK, LAG
- JSONB — хранение и запросы к JSON-данным
- Партиционирование — для больших таблиц
PostgreSQL — это инструмент на годы. Чем глубже вы его знаете, тем более ценным специалистом становитесь.