Chapter 31. Расширенный SQL

Table of Contents
31.1. Как работают расширения
31.2. Система типов PostgreSQL
31.2.1. Базовые типы
31.2.2. Составные типы
31.2.3. Домены
31.2.4. Псевдо-типы
31.2.5. Полимофмический тип
31.3. User-Defined Functions
31.4. Query Language (SQL) Functions
31.4.1. SQL Functions on Base Types
31.4.2. SQL Functions on Composite Types
31.4.3. SQL Functions as Table Sources
31.4.4. SQL Functions Returning Sets
31.4.5. Polymorphic SQL Functions
31.5. Function Overloading
31.6. Function Volatility Categories
31.7. Procedural Language Functions
31.8. Internal Functions
31.9. C-Language Functions
31.9.1. Dynamic Loading
31.9.2. Base Types in C-Language Functions
31.9.3. Calling Conventions Version 0 for C-Language Functions
31.9.4. Calling Conventions Version 1 for C-Language Functions
31.9.5. Writing Code
31.9.6. Compiling and Linking Dynamically-Loaded Functions
31.9.7. Extension Building Infrastructure
31.9.8. Composite-Type Arguments in C-Language Functions
31.9.9. Returning Rows (Composite Types) from C-Language Functions
31.9.10. Returning Sets from C-Language Functions
31.9.11. Polymorphic Arguments and Return Types
31.10. User-Defined Aggregates
31.11. Типы, определяемые пользователем
31.12. User-Defined Operators
31.13. Operator Optimization Information
31.13.1. COMMUTATOR
31.13.2. NEGATOR
31.13.3. RESTRICT
31.13.4. JOIN
31.13.5. HASHES
31.13.6. MERGES (SORT1, SORT2, LTCMP, GTCMP)
31.14. Interfacing Extensions To Indexes
31.14.1. Index Methods and Operator Classes
31.14.2. Index Method Strategies
31.14.3. Index Method Support Routines
31.14.4. An Example
31.14.5. Cross-Data-Type Operator Classes
31.14.6. System Dependencies on Operator Classes
31.14.7. Special Features of Operator Classes

В этой секции мы расскажем как в PostgreSQL использовать в языке запросов SQL следующие расширения:

31.1. Как работают расширения

PostgreSQL является расширяемой системой, потому что её работа управляется каталогом. Если вы хорошо знакомы со стандартными РСУБД, вы знаете, что они хранят информацию о базах данных, таблицах, столбцах и т.д. в так называемых системных каталогах. (Некоторые системы называют их словарём данных). Эти каталоги выглядят для пользователя как обычные таблицы, но DBMS хранит в них свою внутреннюю кухню. Одно из ключевых отличий между PostgreSQL и стандартными РСУБД состоит в том, что PostgreSQL хранит в своих каталогах намного больше информации: не только информацию о таблицах и столбцах, но также информацию о типах данных, функциях, методах доступа и т.д. Таблицы каталога могут быть изменены пользователем и в силу этих операций PostgreSQL может быть расширен пользователями. Для сравнения, обычные СУБД могут расширяться только через изменение процедур, которые жёстко вкомпилированы в код, т.е. через изменение исходного кода или путём загрузки модулей, специально написанных производителем СУБД.

Кроме того, сервер PostgreSQL с помощью динамической загрузки может включать в себя написанный пользователем код. Таким образом, пользователь может указать файл с объектым кодом (например, разделяемую библиотеку) который реализует какой-либо новый тип или функцию и PostgreSQL загрузит его как только он потребуется. Ещё более просто добавить к серверу код, написанный на языке SQL. Это сделает возможным изменять операции "на лету", что делает PostgreSQL уникальным инструментом для быстрого создания прототипов новых приложений и структур хранения.