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

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

Содержание

40. Расширение SQL
40.1. Как реализована расширяемость
40.2. Система типов Postgres Pro
40.3. Пользовательские функции
40.4. Пользовательские процедуры
40.5. Функции на языке запросов (SQL)
40.6. Перегрузка функций
40.7. Категории изменчивости функций
40.8. Функции на процедурных языках
40.9. Внутренние функции
40.10. Функции на языке C
40.11. Информация для оптимизации функций
40.12. Пользовательские агрегатные функции
40.13. Пользовательские типы
40.14. Пользовательские операторы
40.15. Информация для оптимизации операторов
40.16. Интерфейсы расширений для индексов
40.17. Упаковка связанных объектов в расширение
40.18. Инфраструктура сборки расширений
41. Триггеры
41.1. Обзор механизма работы триггеров
41.2. Видимость изменений в данных
41.3. Триггерные функции на языке C
41.4. Полный пример триггера
42. Триггеры событий
42.1. Обзор механизма работы триггеров событий
42.2. Триггерные функции событий на языке C
42.3. Полный пример триггера события
42.4. Пример событийного триггера, обрабатывающего перезапись таблицы
42.5. Пример событийного триггера, обрабатывающего вход в базу данных
43. Система правил
43.1. Дерево запроса
43.2. Система правил и представления
43.3. Материализованные представления
43.4. Правила для INSERT, UPDATE и DELETE
43.5. Правила и права
43.6. Правила и статус команд
43.7. Сравнение правил и триггеров
44. Процедурные языки
44.1. Установка процедурных языков
45. PL/pgSQL — процедурный язык SQL
45.1. Обзор
45.2. Структура PL/pgSQL
45.3. Объявления
45.4. Выражения
45.5. Основные операторы
45.6. Управляющие структуры
45.7. Курсоры
45.8. Управление транзакциями
45.9. Сообщения и ошибки
45.10. Триггерные функции
45.11. Пакеты
45.12. PL/pgSQL изнутри
45.13. Советы по разработке на PL/pgSQL
45.14. Портирование из Oracle PL/SQL
46. PL/Tcl — процедурный язык Tcl
46.1. Обзор
46.2. Функции на PL/Tcl и их аргументы
46.3. Значения данных в PL/Tcl
46.4. Глобальные данные в PL/Tcl
46.5. Обращение к базе данных из PL/Tcl
46.6. Триггерные функции на PL/Tcl
46.7. Функции событийных триггеров в PL/Tcl
46.8. Обработка ошибок в PL/Tcl
46.9. Явные подтранзакции в PL/Tcl
46.10. Управление транзакциями
46.11. Конфигурация PL/Tcl
46.12. Имена процедур Tcl
47. PL/Perl — процедурный язык Perl
47.1. Функции на PL/Perl и их аргументы
47.2. Значения в PL/Perl
47.3. Встроенные функции
47.4. Глобальные значения в PL/Perl
47.5. Доверенный и недоверенный PL/Perl
47.6. Триггеры на PL/Perl
47.7. Событийные триггеры на PL/Perl
47.8. Внутренние особенности PL/Perl
48. PL/Python — процедурный язык Python
48.1. Функции на PL/Python
48.2. Значения данных
48.3. Совместное использование данных
48.4. Анонимные блоки кода
48.5. Триггерные функции
48.6. Обращение к базе данных
48.7. Явные подтранзакции
48.8. Управление транзакциями
48.9. Вспомогательные функции
48.10. Python 2 и Python 3
48.11. Переменные окружения
49. Интерфейс программирования сервера
49.1. Интерфейсные функции
49.2. Вспомогательные интерфейсные функции
49.3. Управление памятью
49.4. Управление транзакциями
49.5. Видимость изменений в данных
49.6. Примеры
50. Фоновые рабочие процессы
51. Логическое декодирование
51.1. Примеры логического декодирования
51.2. Концепции логического декодирования
51.3. Интерфейс протокола потоковой репликации
51.4. Интерфейс логического декодирования на уровне SQL
51.5. Системные каталоги, связанные с логическим декодированием
51.6. Модули вывода логического декодирования
51.7. Запись вывода логического декодирования
51.8. Поддержка синхронной репликации для логического декодирования
51.9. Передача больших транзакций для логического декодирования
51.10. Поддержка двухфазной фиксации для логического декодирования
52. Отслеживание прогресса репликации
53. Модули архивирования
53.1. Функции инициализации
53.2. Обработчики модулей архивирования
54. Модули проверки OAuth
54.1. Безопасное проектирование модуля проверки
54.2. Функции инициализации
54.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 Postgres Pro has been understood. Later chapters in this part describe the server-side programming languages available in the Postgres Pro distribution as well as general issues concerning server-side programming. It is essential to read at least the earlier sections of Chapter 40 (covering functions) before diving into the material about server-side programming.

Table of Contents

40. Extending SQL
40.1. How Extensibility Works
40.2. The Postgres Pro Type System
40.3. User-Defined Functions
40.4. User-Defined Procedures
40.5. Query Language (SQL) Functions
40.6. Function Overloading
40.7. Function Volatility Categories
40.8. Procedural Language Functions
40.9. Internal Functions
40.10. C-Language Functions
40.11. Function Optimization Information
40.12. User-Defined Aggregates
40.13. User-Defined Types
40.14. User-Defined Operators
40.15. Operator Optimization Information
40.16. Interfacing Extensions to Indexes
40.17. Packaging Related Objects into an Extension
40.18. Extension Building Infrastructure
41. Triggers
41.1. Overview of Trigger Behavior
41.2. Visibility of Data Changes
41.3. Writing Trigger Functions in C
41.4. A Complete Trigger Example
42. Event Triggers
42.1. Overview of Event Trigger Behavior
42.2. Writing Event Trigger Functions in C
42.3. A Complete Event Trigger Example
42.4. A Table Rewrite Event Trigger Example
42.5. A Database Login Event Trigger Example
43. The Rule System
43.1. The Query Tree
43.2. Views and the Rule System
43.3. Materialized Views
43.4. Rules on INSERT, UPDATE, and DELETE
43.5. Rules and Privileges
43.6. Rules and Command Status
43.7. Rules Versus Triggers
44. Procedural Languages
44.1. Installing Procedural Languages
45. PL/pgSQLSQL Procedural Language
45.1. Overview
45.2. Structure of PL/pgSQL
45.3. Declarations
45.4. Expressions
45.5. Basic Statements
45.6. Control Structures
45.7. Cursors
45.8. Transaction Management
45.9. Errors and Messages
45.10. Trigger Functions
45.11. Packages
45.12. PL/pgSQL under the Hood
45.13. Tips for Developing in PL/pgSQL
45.14. Porting from Oracle PL/SQL
46. PL/Tcl — Tcl Procedural Language
46.1. Overview
46.2. PL/Tcl Functions and Arguments
46.3. Data Values in PL/Tcl
46.4. Global Data in PL/Tcl
46.5. Database Access from PL/Tcl
46.6. Trigger Functions in PL/Tcl
46.7. Event Trigger Functions in PL/Tcl
46.8. Error Handling in PL/Tcl
46.9. Explicit Subtransactions in PL/Tcl
46.10. Transaction Management
46.11. PL/Tcl Configuration
46.12. Tcl Procedure Names
47. PL/Perl — Perl Procedural Language
47.1. PL/Perl Functions and Arguments
47.2. Data Values in PL/Perl
47.3. Built-in Functions
47.4. Global Values in PL/Perl
47.5. Trusted and Untrusted PL/Perl
47.6. PL/Perl Triggers
47.7. PL/Perl Event Triggers
47.8. PL/Perl Under the Hood
48. PL/Python — Python Procedural Language
48.1. PL/Python Functions
48.2. Data Values
48.3. Sharing Data
48.4. Anonymous Code Blocks
48.5. Trigger Functions
48.6. Database Access
48.7. Explicit Subtransactions
48.8. Transaction Management
48.9. Utility Functions
48.10. Python 2 vs. Python 3
48.11. Environment Variables
49. Server Programming Interface
49.1. Interface Functions
49.2. Interface Support Functions
49.3. Memory Management
49.4. Transaction Management
49.5. Visibility of Data Changes
49.6. Examples
50. Background Worker Processes
51. Logical Decoding
51.1. Logical Decoding Examples
51.2. Logical Decoding Concepts
51.3. Streaming Replication Protocol Interface
51.4. Logical Decoding SQL Interface
51.5. System Catalogs Related to Logical Decoding
51.6. Logical Decoding Output Plugins
51.7. Logical Decoding Output Writers
51.8. Synchronous Replication Support for Logical Decoding
51.9. Streaming of Large Transactions for Logical Decoding
51.10. Two-phase Commit Support for Logical Decoding
52. Replication Progress Tracking
53. Archive Modules
53.1. Initialization Functions
53.2. Archive Module Callbacks
54. OAuth Validator Modules
54.1. Safely Designing a Validator Module
54.2. Initialization Functions
54.3. OAuth Validator Callbacks
FAQ