Функции для документирования баз данных. Окончание

PostgreSQL_intoDOCЭто окончание статьи, которая описывает пользовательские функции для работы с системными каталогами: pg_class, pg_attribute, pg_constraint и т.д.

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

В первой половине статьи изложены комментарии к реализации функций. Во второй- исходные тексты функций. Тем из читателей, кого интересуют только исходные тексты, предлагаем сразу перейти к Приложению или  Скачать все скрипты одним архивом скачать все скрипты одним архивом.

Содержание

Структура функции admtf_Table_Sequences
Функция admtf_Sequence_Features — список характеристики последовательности
базы данных

Функция admtf_Table_Sequences список последовательностей таблицы базы данных и их характеристик
    Версия admtf_Table_Sequences без курсора
Функция admtf_Table_InheritanceChildrens – список характеристик унаследованных таблиц
  Дополнительно создана функция admfn_Table_RowCount
Структура функции, возвращающей список характеристик атрибута таблицы
Функция admtf_Attribute_Features — список характеристик атрибута таблицы
Функци admtf_Attribute_PKFeatures — — присутствует ли атрибут в первичном ключе
    Функция admtf_Attribute_FKFeatures -присутствует ли атрибут во внешнем ключе
Структура функции, возвращающей список характеристик первичного ключа таблицы
Функция admtf_PrimaryKey_ComplexFeatures – комплексный список характеристик первичного ключа таблицы
    Функция admtf_PrimaryKey_Features
    Функция admtf_PrimaryKey_Attributes
Структура функции, возвращающей список характеристик внешнего ключа таблицы
Функция admtf_ForeignKey_ComplexFeatures – комплексный список характеристик внешнего ключа таблицы
    Функция admtf_ForeignKey_Features
    Функция admtf_ForeignKey_Attributes
    Функция admtf_ForeignKey_Attributes
    Функция admtf_ForeignKey_ReferenceTableComplexFeatures
        Функция admtf_ForeignKey_ReferenceTableFeatures
        Функция admtf_ForeignKey_ReferenceTableFeatures
        Функция admtf_ForeignKey_ReferenceTableAttributes
Структура функции, возвращающей список характеристик индекса таблицы
Функция admtf_Index_ComplexFeatures – комплексный список характеристик индекса таблицы
    Функция admtf_Index_Features
    Функция admtf_ Index_Attributes
Функция admtf_Index_ComplexFeatures – комплексный список характеристик индекса таблицы
    Функция admtf_Index_Features
    Функция admtf_ Index_Attributes
Функции admtf_Table_ComplexFeatures — комплексный список характеристик таблицы базы данных
Где использовались функции?


ПРИЛОЖЕНИЕ.
    Создание функции admtf_Sequence_Features
    Создание функции admtf_Table_Sequences
    Создание функции admtf_Table_Sequences без курсора (PostgreSQL 10)
    Создание функции admfn_Table_RowCount
    Создание функции admtf_Table_InheritanceChildrens
    Создание функции admtf_Attribute_PKFeatures
    Создание функции admtf_Attribute_FKFeatures
    Создание функции admtf_Attribute_Features
    Создание функции admtf_PrimaryKey_Features
    Создание функции admtf_PrimaryKey_Attributes
    Создание функции admtf_PrimaryKey_ComplexFeatures
    Создание функции admtf_ForeignKey_Features
    Создание функции admtf_ForeignKey_Attributes
    Создание функции admtf_ForeignKey_ReferenceTableFeatures
    Создание функции admtf_ForeignKey_ReferenceTableAttributes
    Создание функции admtf_ForeignKey_ReferenceTableComplexFeatures
    Создание функции admtf_ForeignKey_ComplexFeatures
    Создание функции admtf_Index_Features
    Создание функции admtf_Index_Attributes
    Создание функции admtf_Index_ComplexFeatures
    Создание функции admtf_Table_ComplexFeatures


Структура функции, возвращающей список характеристик последовательностей таблицы

Table_SequencesStructure

Рис. 2.Функции, от которых зависит admtf_Table_Sequences функции

Таблица 11. Назначение функций

Sequences_Feature_Table

Функция admtf_Sequence_Features — список характеристики последовательности базы данных

Функция admtf_Sequence_Features возвращает список характеристик последовательности (SEQUENCE) базы данных. Исходный код можно посмотреть и скачать здесь.

Функция admtf_Sequence_Features возвращает список характеристик последовательности (SEQUENCE) базы данных.
В качестве параметров функция принимает название последовательности (a_SequenceName) и название схемы, в пределах которой последовательность создана (a_SchemaName).

Необходимость в функции admtf_Sequence_Features возникла из-за того, что основные характеристики последовательности хранятся фактически в таблице, название которой совпадает с названием последовательности, а данные из нее извлекаются с помощью оператора SELECT. При этом название последовательности, название схемы и комментарий к последовательности хранятся в каталогах pg_class, pg_namespace и pg_description.
SELECT_Sequence

Замечание 6

В 10 версии PostgreSQL разделили характеристики последовательности и характеристики ее состояний. Для этого введен каталог pg_sequence с характеристиками последовательности, содержащий начальное значение (start_value), приращение (increment_by) и максимальное значение(max_value) последовательности. Последнее возвращенное последовательностью значение (last_value) так и оставили в «таблице» с названием последовательности.

Конец замечания.

Представление каждой последовательности в виде аналога таблицы, думаю, продиктовано необходимостью хранения последнего использованного значения последовательности (last_value), которое является характеристикой состояния последовательности, но не последовательности как таковой.

Запись о последовательности в каталоге pg_class отличается от записи о таблице значением вида отношения (relkind=‘S’).

Для того, чтобы извлекать характеристики произвольной последовательности, приходится использовать динамический SQL.
EXEC_SELECT_Sequence

Таблица 12.Результат выполнения функции admtf_Sequence_Features(‘public’,’kr_road_network_vertices_pgr_id_seq’).

table_of_seq_record

Функция admtf_Table_Sequences список последовательностей таблицы базы данных и их характеристик

Функция admtf_Table_Sequences возвращает список последовательностей (SEQUENCE) таблицы базы данных, генерирующих значения ее полей, и характеристики этих последовательностей.Исходный код можно посмотреть и скачать здесь, а здесь приведена версия функции, в которой не используется курсор.

В качестве параметров функция принимает название исходной таблицы (a_TableName) и название схемы, в пределах которой создана таблица (a_SchemaName).

SELECT_Table_S_inside


Описание отдельной последовательности представляет собой совокупность записи в pg_class, описывающей его как физическое отношение, и условной таблицы с названием последовательности, содержащей данные о специфических характеристиках последовательности

Информация о связи последовательности и исходной таблицы хранится в системном каталоге pg_depend.

Таблица 13.Атрибуты каталога pg_depend, необходимые для реализации функции.

pg_depend_Attributes_Seq
Дополнительно функция обращается к данным каталогов pg_namespace и pg_description, для того чтобы извлечь схемы и комментарии как последовательности, так и исходной таблице.

Для определения атрибута таблицы, значения которой заполняются при помощи последовательности, функция обращается к каталогу pg_attribute по условию: attrelid= refobjid AND attnum= refobjsubid. (В этом условии справа от знака равенства указаны названия атрибутов каталога pg_depend).

Специальные характеристики последовательностей таблицы извлекаются в цикле вызовом функции admtf_Sequence_Features. Цикл применяется потому, что для заполнения полей таблицы может быть назначено более одной последовательности.

Таблица 14. Результат выполнения функции admtf_Table_Sequences (‘public’,’kr_road_network_vertices_pgr’).

Table_S_results

Версия admtf_Table_Sequences без курсора

В среде PostgreSQL, версия которой меньше 10, реализовать функцию admtf_Table_Sequences без использования курсора, скорее всего, невозможно.
Но счастливые обладатели 10 версии вполне могут обойтись без курсора, т.к. в их распоряжении есть каталог pg_sequence. В этом случае все характеристики последовательности можно извлечь одним оператором SELECT.

В приведенной реализации функции с помощью оконной функции RANK() OVER (PARTITION BY pseq.relname) вычисляется порядковый номер последовательности, используемой для заполнения исходной таблицы.

SELECT_Table_S_woc_inside

Замечание 7.

Эта версия функции не возвращает последнее сгенерированное последовательностью значение (last_value).

Конец замечания.

Функция admtf_Table_InheritanceChildrens – список характеристик унаследованных таблиц

Функция admtf_Table_InheritanceChildrens возвращает список характеристик унаследованных таблиц (INHERITS) таблицы базы данных. Исходный код можно посмотреть и скачать здесь.

В качестве параметров функция принимает название исходной таблицы (a_TableName) и название схемы, в пределах которой создана таблица (a_SchemaName).

Описание отдельной унаследованной таблицы находится в записи в pg_class. Но для поиска унаследованных таблиц по названию исходной таблицы приходится использовать системный каталог pg_depend.

Таблица 15. Атрибуты каталога pg_depend, необходимые для реализации функции.

pg_depend_Attributes_IC


SELECT_Table_IC_inside
Дополнительно функция обращается к данным каталогов pg_namespace и pg_description, для того чтобы извлечь схемы и комментарии как к унаследованным, так и к исходной таблице.

Таблица 16. Результат выполнения функции admtf_Table_InheritanceChildrens (‘public’,’np_house’).

InheritanceChildrens_F_result
Количество записей в порожденной таблицы выбирается из атрибута reltuple каталога pg_class. И хотя это значение часто в точности совпадает с действительным числом записей в таблице, все же это оценочное значение. А значит может возникнуть желание получить в результате точное значение. Например, так как показано на рисунке.
Table_ROWCOUNT


Но, во-первых, для того чтобы выполнить это утверждение в тексте функция admtf_Table_InheritanceChildrens придется использовать курсор.

Во-вторых, хотелось бы, чтобы функция позволяла выводить как оценочное, так и точное количество записей таблицы.

Поэтому функция имеет еще одни необязательный параметр – режим получения количества записей таблицы (a_Mode), который принимает значения «оценочно» (estimate) или «точно» (exactly).


Дополнительно создана функция admfn_Table_RowCount, возвращающая точное число записей таблицы, а в списке возвращаемых значений SELECT атрибут reltuple заменен следующей конструкцией.

Table_ROWCOUNT_mode


В результате функция возвращает оценочное значение показателя «число записей таблицы», если параметром a_Mode не задано требование возвращать точное значение.

Структура функции, возвращающей список характеристик атрибута таблицы

Attribute_FeatureStructure

Рис. 3. Функции, которые вызывает admtf_Attribute_Features

Attribute_Feature_Table

Таблица 17. Назначение функций.

Функция admtf_Attribute_PKFeatures — — присутствует ли атрибут в первичном ключе

Функция admtf_Attribute_PKFeatures возвращает признак присутствия атрибута таблицы в первичном ключе (PRIMARY KEY) таблицы, и, если он присутствует, каков его порядковый номер в этом ключе, т.к. первичный ключ может быть составным.

Исходный код можно посмотреть и скачать здесь.

В качестве параметров функция принимает OID исходной таблицы (a_TableOID) и порядковый номер искомого атрибута в ней (a_AttributeNo).
Нужные данные функция извлекает из записи каталога pg_constraint, содержащей ограничения (CONSTRAINT) исходной таблицы, в том числе, ограничение первичного ключа. OID искомой таблицы хранится в поле conrelid, описание первичного ключа хранится в записи, в которой поле contype содержит значение ‘p’.

SELECT_Attribute_PKF_inside

Поле conkey, найденной таким образом записи, содержит массив порядковых номеров атрибутов, которые составляют первичный ключ. Поэтому, для того чтобы проверить присутствие исходного атрибута в первичном ключе, достаточно вычислить логическое выражение ARRAY[a_AttributeNo]<@conkey.

Если атрибут присутствует в первичном ключе, то далее в цикле вычисляется его порядковый номер.

Функция admtf_Attribute_FKFeatures -присутствует ли атрибут во внешнем ключе

Функция admtf_Attribute_FKFeatures возвращает признак присутствия атрибута таблицы в одном или нескольких внешних ключах (FOREIGN KEY) таблицы, и, если он присутствует, каковы его порядковые номера в этих ключах, т.к. внешний ключ может быть составным.

Исходный код можно посмотреть и скачать здесь.

В качестве параметров функция принимает OID исходной таблицы (a_TableOID) и порядковый номер искомого атрибута в ней (a_AttributeNo).

Нужные данные функция извлекает из записи каталога pg_constraint, содержащей ограничения (CONSTRAINT) исходной таблицы, в том числе, в том числе, ограничения внешних ключей. OID искомой таблицы хранится в поле conrelid, описание первичного ключа хранится в записи, в которой поле contype содержит значение ‘f’.

SELECT_Attribute_FKF_inside

Поле conkey, найденной таким образом записи, содержит массив порядковых номеров атрибутов, которые составляют внешний ключ. Поэтому, для того чтобы проверить присутствие исходного атрибута во внешнем ключе, достаточно вычислить логическое выражение ARRAY[a_AttributeNo]<@conkey.

Если атрибут присутствует во внешнем ключе, то далее в цикле формируется массив его порядковых номеров в содержащих его внешних ключах. Дополнительно формируется еще два массива из наименований таблиц и их атрибутов, на которые ссылается исходный атрибут в содержащих его внешних ключах.

Наименования таблиц извлекаются из записи каталога pg_class по идентификатору (OID) извлеченному из поля confrelid записи о внешнем ключе.

Для получения наименования атрибута внешней таблицы используется массив порядковых номеров из поля confkey
(он отличается о рассмотренного выше массива буквой «f» в названии). Из этого массива извлекается порядковый номер атрибута внешней таблицы, которому соответствует внешний атрибут. По этому порядковому номеру атрибута внешней таблицы и ее OID, находится в каталоге pg_attribute находится записи о описание атрибута и извлекается его название.

Функция admtf_Attribute_Features — список характеристик атрибута таблицы

Функции admtf_Attribute_Features возвращает список следующих характеристик атрибута таблицы.Исходный код можно посмотреть и скачать здесь.

admtf_Attribute_Features Returns

В качестве параметров функция принимает OID исходной таблицы (a_TableOID) и порядковый номер искомого атрибута в ней (a_AttributeNo). Значения полей AttributeName и isNotNULL извлекаются из записи каталога pg_attribute, соответствующей значениям входных параметров.

SELECT_Attribute_F_inside

Значения полей isAttributePK и ColumnPKNo возвращаются функцией admtf_Attribute_PKFeatures.

Значения полей isAttributeFK, FKeyName, ColumnFKNo, FKTableName, FKTableColumnName возвращаются функцией admtf_Attribute_FKFeatures.

Вызов функции admtf_Attribute_Features((SELECT OID FROM pg_class WHERE relname=’street’),2::SMALLINT) приведет к следующему результату.

Таблица 18. Результат выполнения функции admtf_Attribute_Features

SELECT_Attribute_F_result

Структура функции, возвращающей список характеристик первичного ключа таблицы

PrimaryKey_FeatureStructure

Рис. 4. Функции, которые вызывает admtf_PrimaryKey_ComplexFeatures.

Таблица 20. Назначение функций.

PK_Feature_Table

Функция admtf_PrimaryKey_ComplexFeatures – комплексный список характеристик первичного ключа таблицы

Таблица 21. Результат выполнения функции admtf_PrimaryKey_ComplexFeatures (‘public’,’ xpkstreet’).

SELECT_PK_CF_results

В качестве обязательных параметров функция принимает название первичного ключа (a_PrimaryKeyName) и название схемы, в пределах которой создана таблица (a_SchemaName). Код функции представляет собой последовательный вызов двух табличных функций.

Исходный код можно посмотреть и скачать здесь.

Первая функция (admtf_PrimaryKey_Features) подготавливает и выполняет SELECT, возвращающий характеристики первичного ключа.

SELECT_PK_F_inside


Вторая функция (admtf_PrimaryKey_Attributes) возвращает характеристики атрибутов, составляющих первичный ключ.

SELECT_PK_A_inside

Здесь следует обратить внимание на порядок вывода записей об атрибутах первичного ключа. Они выводятся в порядке описания в первичном ключе (con.No), а не в порядке их описания в таблице (attr.attnum).

Особенности соединения записей, используемых системных каталогов, подробно рассмотрены в разделе «Функция admtf_Table_Constraintes список ограничений таблицы базы данных и их характеристик».

Структура функции, возвращающей список характеристик внешнего ключа таблицы

ForeignKey_FeatureStructure

Рис. 5. Функции, которые вызывает admtf_ForeignKey_ComplexFeatures.

Таблица 22. Назначение функций.

FK_Feature_Table

Функция admtf_ForeignKey_ComplexFeatures – комплексный список характеристик внешнего ключа таблицы

Функции admtf_ForeignKey_ComplexFeatures возвращает список следующих характеристик внешнего ключа таблицы.

Таблица 23. Результат выполнения функции admtf_ForeignKey_ComplexFeatures (‘public’,’fk_street_locality’,3).

SELECT_FK_CF_results

В качестве параметров функция принимает название внешнего ключа (a_ ForeignKey) и название схемы, в пределах которой создан внешний ключ (a_SchemaName).

Исходный код можно посмотреть и скачать здесь.

У функции есть еще одни необязательный параметр — порядковый номер индекса таблицы (a_ForeignKeyNo). Этот параметр нужен для того, чтобы в значения категории добавлять порядковый номер внешнего ключа таблицы. В частности, в приведенном примере функция выполнялась со значением этого параметра равным 3. Поэтому запись с характеристиками внешнего ключа помечена значением «fk03», записи с характеристиками атрибутов — «fk03att», запись о внешней таблице — «fk03rtbl», а записи об атрибутах внешней таблицы — «fk03ratt». Если при вызове функции опустить этот параметр, то значения категорий в записях были бы «fk», «fkatt», «fkrtbl» и «fkratt» соответственно. По этой же причине значение категории формируется внутри функции admtf_ForeignKey_ComplexFeatures, а не в коде вызывающей ее функции. Подробнее смотри в разделе «О каких расширенных характеристиках идет речь?»

Код функция представляет собой последовательный вызов трех табличных функций: admtf_ForeignKey_Features, admtf_ForeignKey_Attributes, admtf_ForeignKey_ReferenceTableComplexFeatures

.

Первая функция (admtf_ForeignKey_Features) подготавливает и выполняет SELECT, возвращающий характеристики внешнего ключа.

SELECT_FK_F_inside


Вторая функция (admtf_ForeignKey_Attributes) возвращает характеристики атрибутов внешнего ключа.

Здесь следует обратить внимание на порядок вывода записей об атрибутах внешнего ключа. Они выводятся в порядке описания во внешнем ключе (con.No), а не в порядке их описания в таблице (attr.attnum).

Особенности соединения записей, используемых системных каталогов, подробно рассмотрены в разделе «Функция admtf_Table_Constraintes — список ограничений таблицы базы данных и их характеристик».

SELECT_FK_A_inside

Третья функция (admtf_ForeignKey_ReferenceTableComplexFeatures) возвращает характеристики таблицы, на которую ссылается внешний ключ. Для решения своей задачи она последовательно вызывает две дополнительные функции.

Функция admtf_ForeignKey_ReferenceTableComplexFeatures – комплексный список характеристик таблицы, на которую ссылается внешний ключ

В качестве параметров функция принимает название внешнего ключа (a_ForeignKey) и название схемы, в пределах которой создан внешний ключ (a_SchemaName).

У функции есть еще одни необязательный параметр — порядковый номер индекса таблицы (a_ForeignKeyNo). Этот параметр нужен для того, чтобы в значениях категории замещать порядковым номером символ ‘%’ в «fk%rtbl» и «fk%ratt» соответственно.

Функция последовательно вызывает две дополнительные функции:admtf_ForeignKey_ReferenceTableFeatures,admtf_ForeignKey_ReferenceTableAttributes.

Первая admtf_ForeignKey_ReferenceTableFeatures возвращает непосредственно характеристики таблицы, на которую ссылается внешний ключ, и представляет собой упрощенную версию функции admtf_Table_Features.

Вторая admtf_ForeignKey_ReferenceTableAttributes – характеристики атрибутов внешней таблицы, соответствующие атрибутам внешнего ключа. Она почти полностью повторяет код функции admtf_ForeignKey_Attributes. Только в некоторых местах вместо идентификатора con.conrelid используется con.confrelid, и вместо массива con.conkey используется con.confkey.

SELECT_FK_RTA_confrelid_vs_conrelid


Структура функции, возвращающей список характеристик индекса таблицы

Index_FeatureStructure

Рис. 6. Функции, которые вызывает admtf_Index_ComplexFeatures.

Таблица 24. Назначение функций.

Index_Feature_Table

Функция admtf_Index_ComplexFeatures – комплексный список характеристик индекса таблицы

Функции admtf_Index_ComplexFeatures возвращает список следующих характеристик индекса таблицы.

Таблица 25. Результат выполнения функции admtf_Index_ComplexFeatures (‘public’,’xie9street’,7).

Indexe_CF_Result

В качестве параметров функция принимает название индекса (a_ Index) и название схемы, в пределах которой создан индекс (a_SchemaName).

Исходный код можно посмотреть и скачать здесь.

У функции есть еще одни необязательный параметр — порядковый номер индекса таблицы (a_IndexNo). Этот параметр нужен для того, чтобы в значения категории добавлять порядковый номер индекса таблицы. В частности, в приведенном примере функция выполнялась со значением этого параметра равным 7. Поэтому запись с характеристиками индекса помечена значением «idx07», а записи с характеристиками атрибутов — «idx07att». Если при вызове функции опустить этот параметр, то значения категорий в записях были бы «idx» и «idxatt» соответственно.

Подробнее смотри в разделе «О каких расширенных характеристиках идет речь?». По этой же причине значение категории формируется внутри функции admtf_Index_ComplexFeatures, а не в коде вызывающей ее функции.

Код функции представляет собой последовательный вызов двух табличных функций: admtf_Index_Features, admtf_ Index_Attributes.

Первая функция (admtf_Index_Features) подготавливает и выполняет SELECT, возвращающий характеристики индекса.

SELECT_Index_F_inside


Вторая функция (admtf_ Index_Attributes) возвращает характеристики атрибутов, включенных в состав индекса. Обратите внимание, что порядок записей об атрибутах определяется порядком их описания в индексе (inx.No), а не порядком физического следования в таблице (attr.attnum).

SELECT_Index_A_inside

Особенности соединения записей, используемых системных каталогов, подробно рассмотрены в разделе «Функция admtf_Table_Indexes список индексов таблицы базы данных и их характеристик.

Функци\я admtf_Table_ComplexFeatures — комплексный список характеристик таблицы базы данных

Функция admtf_Table_ComplexFeatures возвращает комплексный список характеристик таблицы базы данных, который включает в себя характеристики, возвращаемые описанными в статье функциями. В качестве параметров функция принимает название исходной таблицы (a_TableName) и название схемы, в пределах которой создана таблица (a_SchemaName).

Исходный код можно посмотреть и скачать здесь.

Таблица 26. Результат выполнения функции admtf_Table_ComplexFeatures(‘public’, ‘street’).

Table_CFeature_Result_Short

В процессе своего выполнения функция последовательно вызывает 9 дополнительных функций, список которых приведен в разделе «Структура головной функции».

Совместное выполнение головной и дополнительных функций приводит в результате к созданию таблицы с расширенными характеристиками таблицы.

Где использовались функции?

Certificate_ HeaderОписанные в статье функции были созданы в процессе подготовки заявки на государственную регистрацию базы данных. Порядок подачи заявки и требования ее оформлению изложены в документе «Правила оформления заявки на государственную регистрацию программы для электронных вычислительных машин или базы данных», утвержденном приказом Минэкономразвития России от 5 апреля 2016 года N 211 (далее Правила).

Обязательной частью заявки является документ «Материалы, идентифицирующие базу данных». Правила трактуют содержание этого документа следующим образом.

«Материалы, идентифицирующие базу данных, должны отражать объективную форму представления совокупности содержащихся в ней самостоятельных материалов в виде примеров реального наполнения и принципы их систематизации (структуру базы данных), позволяющие осуществить нахождение и обработку этих материалов с помощью ЭВМ.»

>Другими словами, документ должен содержать описание структуры базы данных и примеры ее реального наполнения.

Certificate_ PlantUML_Text

Как видно из рисунка, при подготовке заявки на регистрацию базы данных использовались не только функции, описанные в этой статье. Дополнительно были созданы 3- 4 функции для преобразования описаний таблиц базы данных в формат PlantUML.Точнее, эти функции создают код в формате плагина для системы управления проектами TRAC, поэтому если вам захочется проверить созданный этими функциями код, то не забудьте убрать две строчки сверху перед @startuml и все строчки снизу после @enduml.

P.S. Почему здесь не приведены дополнительные функции преобразования описания таблиц базы данных в формат плагина PlantUML для системы управления проектами TRAC? Во-первых, они не вписывались в заявленную тему. Во-вторых, похоже, я утомил читателей текстами функций. Но, если кто-то заинтересуется этими функциями, то пишите мне, и я вышлю их тексты.

Смотрите также

Функции для документирования баз данных PostgreSQL. Начало;

ПРИЛОЖЕНИЕ. Скрипты

Создание функции admtf_Sequence_Features

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_Table_Sequences

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_Table_Sequences без курсора (PostgreSQL 10)

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admfn_Table_RowCount

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_Table_InheritanceChildrens

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_Attribute_PKFeatures

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_Attribute_FKFeatures

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_Attribute_Features

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_PrimaryKey_Features

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_PrimaryKey_Attributes

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_PrimaryKey_ComplexFeatures

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_ForeignKey_Features

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_ForeignKey_Attributes

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_ForeignKey_ReferenceTableFeatures

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_ForeignKey_ReferenceTableAttributes

Комментарии к исходному коду функции можно посмотреть здесь.


Создание функции admtf_ForeignKey_ReferenceTableComplexFeatures

Комментарии к исходному коду функции можно посмотреть здесь.