Часть V. Серверное программирование

Эта часть документации посвящена расширению функциональности сервера путём реализации собственных функций, типов данных, триггеров и т. д. Это довольно сложные темы, для освоения которых рекомендуется предварительно изучить и понять всю остальную документацию для пользователей PostgreSQL. В последних главах этой части описываются языки программирования на стороне сервера, поддерживаемые дистрибутивом PostgreSQL, и рассматриваются общие вопросы, связанные с программированием на стороне сервера. Но прежде чем погружаться в этот материал, важно изучить предыдущие разделы Главы 37 (где освещаются функции).

Содержание

37. Расширение SQL
37.1. Как реализована расширяемость
37.2. Система типов PostgreSQL
37.3. Пользовательские функции
37.4. Пользовательские процедуры
37.5. Функции на языке запросов (SQL)
37.6. Перегрузка функций
37.7. Категории изменчивости функций
37.8. Функции на процедурных языках
37.9. Внутренние функции
37.10. Функции на языке C
37.11. Информация для оптимизации функций
37.12. Пользовательские агрегатные функции
37.13. Пользовательские типы
37.14. Пользовательские операторы
37.15. Информация для оптимизации операторов
37.16. Интерфейсы расширений для индексов
37.17. Упаковка связанных объектов в расширение
37.18. Инфраструктура сборки расширений
38. Триггеры
38.1. Обзор механизма работы триггеров
38.2. Видимость изменений в данных
38.3. Триггерные функции на языке C
38.4. Полный пример триггера
39. Триггеры событий
39.1. Обзор механизма работы триггеров событий
39.2. Матрица срабатывания триггеров событий
39.3. Триггерные функции событий на языке C
39.4. Полный пример триггера события
39.5. Пример событийного триггера, обрабатывающего перезапись таблицы
40. Система правил
40.1. Дерево запроса
40.2. Система правил и представления
40.3. Материализованные представления
40.4. Правила для INSERT, UPDATE и DELETE
40.5. Правила и права
40.6. Правила и статус команд
40.7. Сравнение правил и триггеров
41. Процедурные языки
41.1. Установка процедурных языков
42. PL/pgSQL — процедурный язык SQL
42.1. Обзор
42.2. Структура PL/pgSQL
42.3. Объявления
42.4. Выражения
42.5. Основные операторы
42.6. Управляющие структуры
42.7. Курсоры
42.8. Управление транзакциями
42.9. Сообщения и ошибки
42.10. Триггерные функции
42.11. PL/pgSQL изнутри
42.12. Советы по разработке на PL/pgSQL
42.13. Портирование из Oracle PL/SQL
43. PL/Tcl — процедурный язык Tcl
43.1. Обзор
43.2. Функции на PL/Tcl и их аргументы
43.3. Значения данных в PL/Tcl
43.4. Глобальные данные в PL/Tcl
43.5. Обращение к базе данных из PL/Tcl
43.6. Триггерные функции на PL/Tcl
43.7. Функции событийных триггеров в PL/Tcl
43.8. Обработка ошибок в PL/Tcl
43.9. Явные подтранзакции в PL/Tcl
43.10. Управление транзакциями
43.11. Конфигурация PL/Tcl
43.12. Имена процедур Tcl
44. PL/Perl — процедурный язык Perl
44.1. Функции на PL/Perl и их аргументы
44.2. Значения в PL/Perl
44.3. Встроенные функции
44.4. Глобальные значения в PL/Perl
44.5. Доверенный и недоверенный PL/Perl
44.6. Триггеры на PL/Perl
44.7. Событийные триггеры на PL/Perl
44.8. Внутренние особенности PL/Perl
45. PL/Python — процедурный язык Python
45.1. Python 2 и Python 3
45.2. Функции на PL/Python
45.3. Значения данных
45.4. Совместное использование данных
45.5. Анонимные блоки кода
45.6. Триггерные функции
45.7. Обращение к базе данных
45.8. Явные подтранзакции
45.9. Управление транзакциями
45.10. Вспомогательные функции
45.11. Переменные окружения
46. Интерфейс программирования сервера
46.1. Интерфейсные функции
46.2. Вспомогательные интерфейсные функции
46.3. Управление памятью
46.4. Управление транзакциями
46.5. Видимость изменений в данных
46.6. Примеры
47. Фоновые рабочие процессы
48. Логическое декодирование
48.1. Примеры логического декодирования
48.2. Концепции логического декодирования
48.3. Интерфейс протокола потоковой репликации
48.4. Интерфейс логического декодирования на уровне SQL
48.5. Системные каталоги, связанные с логическим декодированием
48.6. Модули вывода логического декодирования
48.7. Запись вывода логического декодирования
48.8. Поддержка синхронной репликации для логического декодирования
49. Отслеживание прогресса репликации

Part V. Server Programming

This part is about extending the server functionality with user-defined functions, data types, triggers, etc. These are advanced topics which should probably be approached only after all the other user documentation about PostgreSQL has been understood. Later chapters in this part describe the server-side programming languages available in the PostgreSQL distribution as well as general issues concerning server-side programming languages. It is essential to read at least the earlier sections of Chapter 37 (covering functions) before diving into the material about server-side programming languages.

Table of Contents

37. Extending SQL
37.1. How Extensibility Works
37.2. The PostgreSQL Type System
37.3. User-Defined Functions
37.4. User-Defined Procedures
37.5. Query Language (SQL) Functions
37.6. Function Overloading
37.7. Function Volatility Categories
37.8. Procedural Language Functions
37.9. Internal Functions
37.10. C-Language Functions
37.11. Function Optimization Information
37.12. User-Defined Aggregates
37.13. User-Defined Types
37.14. User-Defined Operators
37.15. Operator Optimization Information
37.16. Interfacing Extensions to Indexes
37.17. Packaging Related Objects into an Extension
37.18. Extension Building Infrastructure
38. Triggers
38.1. Overview of Trigger Behavior
38.2. Visibility of Data Changes
38.3. Writing Trigger Functions in C
38.4. A Complete Trigger Example
39. Event Triggers
39.1. Overview of Event Trigger Behavior
39.2. Event Trigger Firing Matrix
39.3. Writing Event Trigger Functions in C
39.4. A Complete Event Trigger Example
39.5. A Table Rewrite Event Trigger Example
40. The Rule System
40.1. The Query Tree
40.2. Views and the Rule System
40.3. Materialized Views
40.4. Rules on INSERT, UPDATE, and DELETE
40.5. Rules and Privileges
40.6. Rules and Command Status
40.7. Rules Versus Triggers
41. Procedural Languages
41.1. Installing Procedural Languages
42. PL/pgSQLSQL Procedural Language
42.1. Overview
42.2. Structure of PL/pgSQL
42.3. Declarations
42.4. Expressions
42.5. Basic Statements
42.6. Control Structures
42.7. Cursors
42.8. Transaction Management
42.9. Errors and Messages
42.10. Trigger Functions
42.11. PL/pgSQL under the Hood
42.12. Tips for Developing in PL/pgSQL
42.13. Porting from Oracle PL/SQL
43. PL/Tcl — Tcl Procedural Language
43.1. Overview
43.2. PL/Tcl Functions and Arguments
43.3. Data Values in PL/Tcl
43.4. Global Data in PL/Tcl
43.5. Database Access from PL/Tcl
43.6. Trigger Functions in PL/Tcl
43.7. Event Trigger Functions in PL/Tcl
43.8. Error Handling in PL/Tcl
43.9. Explicit Subtransactions in PL/Tcl
43.10. Transaction Management
43.11. PL/Tcl Configuration
43.12. Tcl Procedure Names
44. PL/Perl — Perl Procedural Language
44.1. PL/Perl Functions and Arguments
44.2. Data Values in PL/Perl
44.3. Built-in Functions
44.4. Global Values in PL/Perl
44.5. Trusted and Untrusted PL/Perl
44.6. PL/Perl Triggers
44.7. PL/Perl Event Triggers
44.8. PL/Perl Under the Hood
45. PL/Python — Python Procedural Language
45.1. Python 2 vs. Python 3
45.2. PL/Python Functions
45.3. Data Values
45.4. Sharing Data
45.5. Anonymous Code Blocks
45.6. Trigger Functions
45.7. Database Access
45.8. Explicit Subtransactions
45.9. Transaction Management
45.10. Utility Functions
45.11. Environment Variables
46. Server Programming Interface
46.1. Interface Functions
46.2. Interface Support Functions
46.3. Memory Management
46.4. Transaction Management
46.5. Visibility of Data Changes
46.6. Examples
47. Background Worker Processes
48. Logical Decoding
48.1. Logical Decoding Examples
48.2. Logical Decoding Concepts
48.3. Streaming Replication Protocol Interface
48.4. Logical Decoding SQL Interface
48.5. System Catalogs Related to Logical Decoding
48.6. Logical Decoding Output Plugins
48.7. Logical Decoding Output Writers
48.8. Synchronous Replication Support for Logical Decoding
49. Replication Progress Tracking
FAQ