Слайд 2
Произношение
PostgreSQL произносится как post-gress-Q-L
В разговоре часто употребляется postgres
(пост-гресс)
Также, употребляется сокращение
pgsql (пи-джи-эс-ку-эл или п-г-эс-ку-эль)
Слайд 3
PostgreSQL – это...
...самая развитая СУБД с открытым кодом
...надежность и устойчивость на очень больших нагрузках
...кроссплатформенность (FreeBSD, Linux, Solaris,
Windows, OS X)
...высокий уровень соответствия
ISO/ANSI SQL 92, 99, 2003
...интерфейсы для Tcl, Perl, C, C++, PHP, ODBC, JDBC,
Embedded SQL in C, Python, Ruby, ...
...расширяемость
...быстродействие
Слайд 4
Место в мире СУБД
PostgreSQL – это свободно распространяемая
объектно-реляционная система управления базами данных (ORDBMS), наиболее развитая из
открытых СУБД в мире, являющаяся реальной альтернативой коммерческим СУБД.
Слайд 5
Происхождение
1985 г. – Post Ingres (v1 – v4.2)
Майкл
Стоунбрейкер
Калифорнийский университет в Беркли
POSTQUEL
1994 г. – Postgres95 v5
Эндрю Ю
и Джолли Чен
Калифорнийский университет в Беркли
SQL
1996 г. – PostgreSQL (v6 – v8)
Развивается сообществом
Стабильная версия на 21.10.2009 – v8.4.1
Слайд 7
Ограничения
Размер БД — нет ограничения
Размер таблицы — до 32 TB
Размер строки — до 1.6 TB
Размер поля — до 1 GB
Количество строк в таблице — нет ограничения
Количество столбцов в таблице — до 250..1600
Количество индексов — нет ограничения
Длина идентификатора – до
63 байт включительно
Слайд 8
Модель «клиент/сервер»
PostgreSQLсессия - это совместная
работа двух процессов:
серверный процесс (postgres)
клиентский процесс (psql, GUIприложение, вебсервер, утилиты обслуживания и т. д.)
Слайд 9
Концепция транзакций
Основной принцип работы системы — ACID:
Atomicity (атомарность) - выполнение или не выполнение
всех DML команд входящих в тразакцию;
Consistency (согласованность БД)
- завершение транзакции не должно нарушать целостность БД;
Isolation (изоляция) - можно отображать либо исходные данные, которые были до начала транзакции, либо новые данные после выполнения транзакции;
Durability (сохранность данных) - если пользователю пришло подтверждение выполнения транзакции, то его изменения не будут отменены по каким-либо причинам.
Слайд 10
MVCC
Multiversion Concurrency Control –
многоверсионный контроль конкурентных
транзакций
Способ реализации принципа изоляции, вместо
классических блокировок
Чтение и запись не конфликтуют
Конфликт только при конкурентных операциях записи
Слайд 11
Объекты в БД
Таблицы
Индексы
Пользователи и группы (роли)
Языки (для создания функций)
Функции (FUNCTION)
Триггеры (TRIGGER)
Правила (RULE)
Представления (VIEW)
Правила преобразования типов (CAST)
Типы данных (TYPE)
Последовательности (SEQUENCE)
Слайд 12
Типы данных
Поддерживаемые встроенные типы данных:
Числовые
Символьные
Бинарные (двоичные)
Логические
Дата и
время
Геометрические
Типы для адресов компьютерных сетей
Битовые строки
Типы для поиска текста
UUID
XML
Слайд 20
Составные типы данных
Массивы простых типов
Составные типы
Массивы составных типов
Перечисления (ENUM)
Слайд 21
Пользовательские типы
CREATE TYPE name AS CREATE TYPE name AS
ENUM
( attribute_name data_type [, ... ] )
( 'label' [, ... ] )
CREATE TYPE name (
INPUT = input_function,
OUTPUT = output_function
[ , RECEIVE = receive_function ]
[ , SEND = send_function ]
[ , TYPMOD_IN = type_modifier_input_function ]
[ , TYPMOD_OUT = type_modifier_output_function ]
[ , ANALYZE = analyze_function ]
[ , INTERNALLENGTH = { internallength | VARIABLE } ]
[ , PASSEDBYVALUE ]
[ , ALIGNMENT = alignment ]
[ , STORAGE = storage ]
[ , DEFAULT = default ]
[ , ELEMENT = element ]
[ , DELIMITER = delimiter ]
)
Слайд 22
Ограничения целостности
NOT NULL - не NULL
UNIQUE -
уникальность
PRIMARY KEY - первичный ключ
FOREIGN KEY/REFERENCES -
внешний ключ, ссылки
CHECK - проверка
Слайд 23
Операторы SQL
1. Операторы описания данных (DDL, Data Definition Language):
CREATE ..., ALTER ..., DROP ... и пр.
Примечание: в PostgreSQL DDLоператоры можно использовать в транзакциях.
2. Операторы манипулирования данными (DML):
SELECT –
выборка данных
INSERT – вставка данных
UPDATE – обновления данных
DELETE –
удаление данных
Слайд 24
Примеры DDL и DML
CREATE TABLE person(
name VARCHAR(32) NOT NULL,
age INTEGER,
CHECK(age >= 0 AND age
(name, age)
VALUES (‘Вольдемар', 22);
UPDATE person SET age = 17
WHERE name = ‘Вольдемар';
DELETE FROM person WHERE age < 18;
Слайд 25
Индексы
PostgreSQL предлагает четыре типа индексов:
B-tree
Hash
GiST
GIN
Индексы могут быть:
составными
функциональными
частичными
CREATE INDEX
person_lower_name_idx ON person (lower(name)) USING btree;
Слайд 26
Функции и хранимые процедуры
SQL
PL/pgSQL
PL/Perl
PL/Tcl
PL/Python
PL/R
PL/Java
plPHP
plRuby
всегда можно добавить что-то своё
Слайд 27
Анализ производительности
Порядок обработки запроса:
парсер –> планировщик –> исполнитель
EXPALAIN
– показывает план запроса с оценочными характеристиками
EXPLAIN ANALYZE –
выполняет запрос и показывает реальное время
Слайд 28
Пример функции
SQL:
CREATE FUNCTION add(integer, integer) RETURNS integer
AS
'select $1 + $2;‘
LANGUAGE SQL IMMUTABLE RETURNS NULL ON
NULL INPUT;
pl/pgSQL:
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer
AS $$
BEGIN RETURN i + 1;
END;
$$ LANGUAGE plpgsql;
Слайд 29
Триггеры
Триггеры могут быть назначены для операторов:
INSERT
UPDATE
DELETE
TRUNCATE
CREATE TRIGGER name
{ BEFORE | AFTER } { event [ OR
... ] } ON table [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE PROCEDURE funcname ( arguments )
Слайд 30
Роли и привилегии
Концепция ролей заменила концепцию пользователей и
групп
CREATE ROLE student WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL
'2005-01-01';
GRANT EXECUTE ON FUNCTION add(integer, integer) TO student;
Слайд 31
Первые шаги после установки
1. Создание кластера БД (initdb)
2. Начальная конфигурация postgresql.conf и pg_hba.conf
3. Запуск сервера PostgreSQL
Слайд 32
Начальная настройка
Всего 2 файла:
postgresql.conf (основные настройки)
listen_addresses (сетевые интерфейсы)
shared_buffers (общая память)
work_mem (память для сортировок и
т.п.)
pg_hba.conf (настройки доступа)
host all all 127.0.0.1/32 md5
Слайд 33
Основные программы/утилиты
postgres – запуск сервера в однопользовательском режиме
initdb — инициализация кластера
pg_ctl — утилита для контроля (запуск/останов)
pg_dump — создание дампа (резервной копии) БД
psql — интерактивный терминал
createdb, createuser, dropdb, dropuser, reindexdb и
т.д. —утилиты работы с БД из shell
Слайд 34
psql
psql — развитая терминальная программа, огромное
количество возможностей
Всегда помнить:
psql --help (в shell)
\?
\h
автодополнение (по нажатию на TAB)
\h ANY-SQL-COMMAND