10
Практика
1. Создайте расширение с функцией для подготовки текста
к публикации. Функция должна применить к текстовому
параметру последовательность правил, выполняющих
замену по регулярному выражению, и вернуть результат.
Правила должны храниться в таблице и применяться
в порядке их вставки. К предопределенным правилам
пользователь может добавлять собственные.
Работа функции не должна зависеть от настройки пути
поиска, но должна позволять выбрать схему при установке.
2. Установите расширение в схему typo, добавьте в таблицу
пользовательское правило. Корректно ли выгружает копию
базы данных утилита pg_dump? Проверьте возможность
добавить правило после восстановления из резервной копии.
1. В качестве предопределенных правил используйте, например:
(^|\s)\"(\S) → \1«\2
(\S)\"(\s|$) → \1»\2
(^|\s)-(\s|$) → \1—\2
Эти правила заменяют (не всегда корректно) обычные символы на
кавычки-елочки и тире:
- Буквы "р" нет, - сказал я. → — Буквы «р» нет, — сказал я.
Чтобы обеспечить независимость от пути поиска, расширение придется
сделать непереносимым. Укажите соответствующий параметр
в управляющем файла, а в теле функции используйте макрос
@extschema@ для указания схемы, в которой находится таблица
правил. Этот макрос будет заменен на выбранную схему при установке.
2. Чтобы утилита pg_dump правильно выгружала пользовательские
правила, используйте функцию pg_extension_config_dump и для самой
таблицы, и для последовательности, созданной для первичного ключа.
При вызове pg_dump можно указать ключи --clean и --create, чтобы
копия включала в себя команды для удаления и создания базы данных.