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

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

Содержание

36. Расширение SQL
36.1. Как реализована расширяемость
36.2. Система типов PostgreSQL
36.3. Пользовательские функции
36.4. Пользовательские процедуры
36.5. Функции на языке запросов (SQL)
36.6. Перегрузка функций
36.7. Категории изменчивости функций
36.8. Функции на процедурных языках
36.9. Внутренние функции
36.10. Функции на языке C
36.11. Информация для оптимизации функций
36.12. Пользовательские агрегатные функции
36.13. Пользовательские типы
36.14. Пользовательские операторы
36.15. Информация для оптимизации операторов
36.16. Интерфейсы расширений для индексов
36.17. Упаковка связанных объектов в расширение
36.18. Инфраструктура сборки расширений
37. Триггеры
37.1. Обзор механизма работы триггеров
37.2. Видимость изменений в данных
37.3. Триггерные функции на языке C
37.4. Полный пример триггера
38. Триггеры событий
38.1. Обзор механизма работы триггеров событий
38.2. Триггерные функции событий на языке C
38.3. Полный пример триггера события
38.4. Пример событийного триггера, обрабатывающего перезапись таблицы
38.5. Пример событийного триггера, обрабатывающего вход в базу данных
39. Система правил
39.1. Дерево запроса
39.2. Система правил и представления
39.3. Материализованные представления
39.4. Правила для INSERT, UPDATE и DELETE
39.5. Правила и права
39.6. Правила и статус команд
39.7. Сравнение правил и триггеров
40. Процедурные языки
40.1. Установка процедурных языков
41. PL/pgSQL — процедурный язык SQL
41.1. Обзор
41.2. Структура PL/pgSQL
41.3. Объявления
41.4. Выражения
41.5. Основные операторы
41.6. Управляющие структуры
41.7. Курсоры
41.8. Управление транзакциями
41.9. Сообщения и ошибки
41.10. Триггерные функции
41.11. PL/pgSQL изнутри
41.12. Советы по разработке на PL/pgSQL
41.13. Портирование из Oracle PL/SQL
42. PL/Tcl — процедурный язык Tcl
42.1. Обзор
42.2. Функции на PL/Tcl и их аргументы
42.3. Значения данных в PL/Tcl
42.4. Глобальные данные в PL/Tcl
42.5. Обращение к базе данных из PL/Tcl
42.6. Триггерные функции на PL/Tcl
42.7. Функции событийных триггеров в PL/Tcl
42.8. Обработка ошибок в PL/Tcl
42.9. Явные подтранзакции в PL/Tcl
42.10. Управление транзакциями
42.11. Конфигурация PL/Tcl
42.12. Имена процедур Tcl
43. PL/Perl — процедурный язык Perl
43.1. Функции на PL/Perl и их аргументы
43.2. Значения в PL/Perl
43.3. Встроенные функции
43.4. Глобальные значения в PL/Perl
43.5. Доверенный и недоверенный PL/Perl
43.6. Триггеры на PL/Perl
43.7. Событийные триггеры на PL/Perl
43.8. Внутренние особенности PL/Perl
44. PL/Python — процедурный язык Python
44.1. Функции на PL/Python
44.2. Значения данных
44.3. Совместное использование данных
44.4. Анонимные блоки кода
44.5. Триггерные функции
44.6. Обращение к базе данных
44.7. Явные подтранзакции
44.8. Управление транзакциями
44.9. Вспомогательные функции
44.10. Python 2 и Python 3
44.11. Переменные окружения
45. Интерфейс программирования сервера
45.1. Интерфейсные функции
45.2. Вспомогательные интерфейсные функции
45.3. Управление памятью
45.4. Управление транзакциями
45.5. Видимость изменений в данных
45.6. Примеры
46. Фоновые рабочие процессы
47. Логическое декодирование
47.1. Примеры логического декодирования
47.2. Концепции логического декодирования
47.3. Интерфейс протокола потоковой репликации
47.4. Интерфейс логического декодирования на уровне SQL
47.5. Системные каталоги, связанные с логическим декодированием
47.6. Модули вывода логического декодирования
47.7. Запись вывода логического декодирования
47.8. Поддержка синхронной репликации для логического декодирования
47.9. Передача больших транзакций для логического декодирования
47.10. Поддержка двухфазной фиксации для логического декодирования
48. Отслеживание прогресса репликации
49. Модули архивирования
49.1. Функции инициализации
49.2. Обработчики модулей архивирования
50. Модули проверки OAuth
50.1. Безопасное проектирование модуля проверки
50.2. Функции инициализации
50.3. Обработчики модуля проверки OAuth

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 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. It is essential to read at least the earlier sections of Chapter 36 (covering functions) before diving into the material about server-side programming.

Table of Contents

36. Extending SQL
36.1. How Extensibility Works
36.2. The PostgreSQL Type System
36.3. User-Defined Functions
36.4. User-Defined Procedures
36.5. Query Language (SQL) Functions
36.6. Function Overloading
36.7. Function Volatility Categories
36.8. Procedural Language Functions
36.9. Internal Functions
36.10. C-Language Functions
36.11. Function Optimization Information
36.12. User-Defined Aggregates
36.13. User-Defined Types
36.14. User-Defined Operators
36.15. Operator Optimization Information
36.16. Interfacing Extensions to Indexes
36.17. Packaging Related Objects into an Extension
36.18. Extension Building Infrastructure
37. Triggers
37.1. Overview of Trigger Behavior
37.2. Visibility of Data Changes
37.3. Writing Trigger Functions in C
37.4. A Complete Trigger Example
38. Event Triggers
38.1. Overview of Event Trigger Behavior
38.2. Writing Event Trigger Functions in C
38.3. A Complete Event Trigger Example
38.4. A Table Rewrite Event Trigger Example
38.5. A Database Login Event Trigger Example
39. The Rule System
39.1. The Query Tree
39.2. Views and the Rule System
39.3. Materialized Views
39.4. Rules on INSERT, UPDATE, and DELETE
39.5. Rules and Privileges
39.6. Rules and Command Status
39.7. Rules Versus Triggers
40. Procedural Languages
40.1. Installing Procedural Languages
41. PL/pgSQLSQL Procedural Language
41.1. Overview
41.2. Structure of PL/pgSQL
41.3. Declarations
41.4. Expressions
41.5. Basic Statements
41.6. Control Structures
41.7. Cursors
41.8. Transaction Management
41.9. Errors and Messages
41.10. Trigger Functions
41.11. PL/pgSQL under the Hood
41.12. Tips for Developing in PL/pgSQL
41.13. Porting from Oracle PL/SQL
42. PL/Tcl — Tcl Procedural Language
42.1. Overview
42.2. PL/Tcl Functions and Arguments
42.3. Data Values in PL/Tcl
42.4. Global Data in PL/Tcl
42.5. Database Access from PL/Tcl
42.6. Trigger Functions in PL/Tcl
42.7. Event Trigger Functions in PL/Tcl
42.8. Error Handling in PL/Tcl
42.9. Explicit Subtransactions in PL/Tcl
42.10. Transaction Management
42.11. PL/Tcl Configuration
42.12. Tcl Procedure Names
43. PL/Perl — Perl Procedural Language
43.1. PL/Perl Functions and Arguments
43.2. Data Values in PL/Perl
43.3. Built-in Functions
43.4. Global Values in PL/Perl
43.5. Trusted and Untrusted PL/Perl
43.6. PL/Perl Triggers
43.7. PL/Perl Event Triggers
43.8. PL/Perl Under the Hood
44. PL/Python — Python Procedural Language
44.1. PL/Python Functions
44.2. Data Values
44.3. Sharing Data
44.4. Anonymous Code Blocks
44.5. Trigger Functions
44.6. Database Access
44.7. Explicit Subtransactions
44.8. Transaction Management
44.9. Utility Functions
44.10. Python 2 vs. Python 3
44.11. Environment Variables
45. Server Programming Interface
45.1. Interface Functions
45.2. Interface Support Functions
45.3. Memory Management
45.4. Transaction Management
45.5. Visibility of Data Changes
45.6. Examples
46. Background Worker Processes
47. Logical Decoding
47.1. Logical Decoding Examples
47.2. Logical Decoding Concepts
47.3. Streaming Replication Protocol Interface
47.4. Logical Decoding SQL Interface
47.5. System Catalogs Related to Logical Decoding
47.6. Logical Decoding Output Plugins
47.7. Logical Decoding Output Writers
47.8. Synchronous Replication Support for Logical Decoding
47.9. Streaming of Large Transactions for Logical Decoding
47.10. Two-phase Commit Support for Logical Decoding
48. Replication Progress Tracking
49. Archive Modules
49.1. Initialization Functions
49.2. Archive Module Callbacks
50. OAuth Validator Modules
50.1. Safely Designing a Validator Module
50.2. Initialization Functions
50.3. OAuth Validator Callbacks
FAQ