Часть II. Язык SQL

В этой части книги описывается использование языка SQL в PostgreSQL. Мы начнём с описания общего синтаксиса SQL, затем расскажем, как создавать структуры для хранения данных, как наполнять базу данных и как выполнять запросы к ней. В продолжении будут перечислены существующие типы данных и функции, применяемые с командами SQL. И наконец, закончится эта часть рассмотрением важных аспектов настройки базы данных для оптимальной производительности.

Материал этой части упорядочен так, чтобы новичок мог прочитать её от начала до конца и полностью понять все темы, не забегая вперёд. При этом главы сделаны самодостаточными, так что опытные пользователи могут читать главы по отдельности. Информация в этой части книги представлена в повествовательном стиле и разделена по темам. Если же вас интересует формальное и полное описание определённой команды, см. Часть VI.

Читатели этой части книги должны уже знать, как подключаться к базе данных PostgreSQL и выполнять команды SQL. Если вы ещё не знаете этого, рекомендуется сначала прочитать Часть I. Команды SQL обычно вводятся в psql — интерактивном терминальном приложении PostgreSQL, но можно воспользоваться и другими программами с подобными функциями.

Содержание

4. Синтаксис SQL
4.1. Лексическая структура
4.2. Выражения значения
4.3. Вызов функций
5. Определение данных
5.1. Основы таблиц
5.2. Значения по умолчанию
5.3. Генерируемые столбцы
5.4. Ограничения
5.5. Системные столбцы
5.6. Изменение таблиц
5.7. Права
5.8. Политики защиты строк
5.9. Схемы
5.10. Наследование
5.11. Секционирование таблиц
5.12. Сторонние данные
5.13. Другие объекты баз данных
5.14. Отслеживание зависимостей
6. Модификация данных
6.1. Добавление данных
6.2. Изменение данных
6.3. Удаление данных
6.4. Возврат данных из изменённых строк
7. Запросы
7.1. Обзор
7.2. Табличные выражения
7.3. Списки выборки
7.4. Сочетание запросов (UNION, INTERSECT, EXCEPT)
7.5. Сортировка строк (ORDER BY)
7.6. LIMIT и OFFSET
7.7. Списки VALUES
7.8. Запросы WITH (Общие табличные выражения)
8. Типы данных
8.1. Числовые типы
8.2. Денежные типы
8.3. Символьные типы
8.4. Двоичные типы данных
8.5. Типы даты/времени
8.6. Логический тип
8.7. Типы перечислений
8.8. Геометрические типы
8.9. Типы, описывающие сетевые адреса
8.10. Битовые строки
8.11. Типы, предназначенные для текстового поиска
8.12. Тип UUID
8.13. Тип XML
8.14. Типы JSON
8.15. Массивы
8.16. Составные типы
8.17. Диапазонные типы
8.18. Типы доменов
8.19. Идентификаторы объектов
8.20. Тип pg_lsn
8.21. Псевдотипы
9. Функции и операторы
9.1. Логические операторы
9.2. Функции и операторы сравнения
9.3. Математические функции и операторы
9.4. Строковые функции и операторы
9.5. Функции и операторы двоичных строк
9.6. Функции и операторы для работы с битовыми строками
9.7. Поиск по шаблону
9.8. Функции форматирования данных
9.9. Операторы и функции даты/времени
9.10. Функции для перечислений
9.11. Геометрические функции и операторы
9.12. Функции и операторы для работы с сетевыми адресами
9.13. Функции и операторы текстового поиска
9.14. Функции генерирования UUID
9.15. XML-функции
9.16. Функции и операторы JSON
9.17. Функции для работы с последовательностями
9.18. Условные выражения
9.19. Функции и операторы для работы с массивами
9.20. Диапазонные/мультидиапазонные функции и операторы
9.21. Агрегатные функции
9.22. Оконные функции
9.23. Выражения подзапросов
9.24. Сравнение табличных строк и массивов
9.25. Функции, возвращающие множества
9.26. Системные информационные функции и операторы
9.27. Функции для системного администрирования
9.28. Триггерные функции
9.29. Функции событийных триггеров
9.30. Системные информационные функции
10. Преобразование типов
10.1. Обзор
10.2. Операторы
10.3. Функции
10.4. Хранимое значение
10.5. UNION, CASE и связанные конструкции
10.6. Выходные столбцы SELECT
11. Индексы
11.1. Введение
11.2. Типы индексов
11.3. Составные индексы
11.4. Индексы и предложения ORDER BY
11.5. Объединение нескольких индексов
11.6. Уникальные индексы
11.7. Индексы по выражениям
11.8. Частичные индексы
11.9. Сканирование только индекса и покрывающие индексы
11.10. Семейства и классы операторов
11.11. Индексы и правила сортировки
11.12. Контроль использования индексов
12. Полнотекстовый поиск
12.1. Введение
12.2. Таблицы и индексы
12.3. Управление текстовым поиском
12.4. Дополнительные возможности
12.5. Анализаторы
12.6. Словари
12.7. Пример конфигурации
12.8. Тестирование и отладка текстового поиска
12.9. Типы индексов, предпочитаемые для текстового поиска
12.10. Поддержка psql
12.11. Ограничения
13. Управление конкурентным доступом
13.1. Введение
13.2. Изоляция транзакций
13.3. Явные блокировки
13.4. Проверки целостности данных на уровне приложения
13.5. Обработка сбоев сериализации
13.6. Ограничения
13.7. Блокировки и индексы
14. Оптимизация производительности
14.1. Использование EXPLAIN
14.2. Статистика, используемая планировщиком
14.3. Управление планировщиком с помощью явных предложений JOIN
14.4. Наполнение базы данных
14.5. Оптимизация, угрожающая стабильности
15. Параллельный запрос
15.1. Как работают параллельно выполняемые запросы
15.2. Когда может применяться распараллеливание запросов?
15.3. Параллельные планы
15.4. Безопасность распараллеливания

Part II. The SQL Language

This part describes the use of the SQL language in PostgreSQL. We start with describing the general syntax of SQL, then explain how to create the structures to hold data, how to populate the database, and how to query it. The middle part lists the available data types and functions for use in SQL commands. The rest treats several aspects that are important for tuning a database for optimal performance.

The information in this part is arranged so that a novice user can follow it start to end to gain a full understanding of the topics without having to refer forward too many times. The chapters are intended to be self-contained, so that advanced users can read the chapters individually as they choose. The information in this part is presented in a narrative fashion in topical units. Readers looking for a complete description of a particular command should see Part VI.

Readers of this part should know how to connect to a PostgreSQL database and issue SQL commands. Readers that are unfamiliar with these issues are encouraged to read Part I first. SQL commands are typically entered using the PostgreSQL interactive terminal psql, but other programs that have similar functionality can be used as well.

Table of Contents

4. SQL Syntax
4.1. Lexical Structure
4.2. Value Expressions
4.3. Calling Functions
5. Data Definition
5.1. Table Basics
5.2. Default Values
5.3. Generated Columns
5.4. Constraints
5.5. System Columns
5.6. Modifying Tables
5.7. Privileges
5.8. Row Security Policies
5.9. Schemas
5.10. Inheritance
5.11. Table Partitioning
5.12. Foreign Data
5.13. Other Database Objects
5.14. Dependency Tracking
6. Data Manipulation
6.1. Inserting Data
6.2. Updating Data
6.3. Deleting Data
6.4. Returning Data from Modified Rows
7. Queries
7.1. Overview
7.2. Table Expressions
7.3. Select Lists
7.4. Combining Queries (UNION, INTERSECT, EXCEPT)
7.5. Sorting Rows (ORDER BY)
7.6. LIMIT and OFFSET
7.7. VALUES Lists
7.8. WITH Queries (Common Table Expressions)
8. Data Types
8.1. Numeric Types
8.2. Monetary Types
8.3. Character Types
8.4. Binary Data Types
8.5. Date/Time Types
8.6. Boolean Type
8.7. Enumerated Types
8.8. Geometric Types
8.9. Network Address Types
8.10. Bit String Types
8.11. Text Search Types
8.12. UUID Type
8.13. XML Type
8.14. JSON Types
8.15. Arrays
8.16. Composite Types
8.17. Range Types
8.18. Domain Types
8.19. Object Identifier Types
8.20. pg_lsn Type
8.21. Pseudo-Types
9. Functions and Operators
9.1. Logical Operators
9.2. Comparison Functions and Operators
9.3. Mathematical Functions and Operators
9.4. String Functions and Operators
9.5. Binary String Functions and Operators
9.6. Bit String Functions and Operators
9.7. Pattern Matching
9.8. Data Type Formatting Functions
9.9. Date/Time Functions and Operators
9.10. Enum Support Functions
9.11. Geometric Functions and Operators
9.12. Network Address Functions and Operators
9.13. Text Search Functions and Operators
9.14. UUID Functions
9.15. XML Functions
9.16. JSON Functions and Operators
9.17. Sequence Manipulation Functions
9.18. Conditional Expressions
9.19. Array Functions and Operators
9.20. Range/Multirange Functions and Operators
9.21. Aggregate Functions
9.22. Window Functions
9.23. Subquery Expressions
9.24. Row and Array Comparisons
9.25. Set Returning Functions
9.26. System Information Functions and Operators
9.27. System Administration Functions
9.28. Trigger Functions
9.29. Event Trigger Functions
9.30. Statistics Information Functions
10. Type Conversion
10.1. Overview
10.2. Operators
10.3. Functions
10.4. Value Storage
10.5. UNION, CASE, and Related Constructs
10.6. SELECT Output Columns
11. Indexes
11.1. Introduction
11.2. Index Types
11.3. Multicolumn Indexes
11.4. Indexes and ORDER BY
11.5. Combining Multiple Indexes
11.6. Unique Indexes
11.7. Indexes on Expressions
11.8. Partial Indexes
11.9. Index-Only Scans and Covering Indexes
11.10. Operator Classes and Operator Families
11.11. Indexes and Collations
11.12. Examining Index Usage
12. Full Text Search
12.1. Introduction
12.2. Tables and Indexes
12.3. Controlling Text Search
12.4. Additional Features
12.5. Parsers
12.6. Dictionaries
12.7. Configuration Example
12.8. Testing and Debugging Text Search
12.9. Preferred Index Types for Text Search
12.10. psql Support
12.11. Limitations
13. Concurrency Control
13.1. Introduction
13.2. Transaction Isolation
13.3. Explicit Locking
13.4. Data Consistency Checks at the Application Level
13.5. Serialization Failure Handling
13.6. Caveats
13.7. Locking and Indexes
14. Performance Tips
14.1. Using EXPLAIN
14.2. Statistics Used by the Planner
14.3. Controlling the Planner with Explicit JOIN Clauses
14.4. Populating a Database
14.5. Non-Durable Settings
15. Parallel Query
15.1. How Parallel Query Works
15.2. When Can Parallel Query Be Used?
15.3. Parallel Plans
15.4. Parallel Safety
FAQ