Средства для реализации партиционирования таблиц в СУБД PostgreSQL
Project description
partitioning
Пакет содержит набор утилит для применения секционирования.
В настоящее время поддерживается только помесячное разбиение таблиц БД на разделы.
Для использования секционирования таблиц необходимо выполнить следующие шаги:
- Проинициализировать средства секционирования для базы данных. Для
этого следует выполнить функцию
init. Функция должна выполняться ОДИН раз для КАЖДОЙ базы данных, используемых системой. В результате выполнения функции в указанной БД будут созданы необходимые функции для поддержки секционирования. - Включить секционирование для конкретных таблиц с помощью функции
set_partitioning. В результате для указанной таблицы будут созданы необходимые триггеры. После этого при добавлении/редактировании записей секционированной таблицы записи будут размещаться в разделах таблицы. Если соответствующие разделы отсутствуют, то они будут создаваться автоматически. - При необходимости, можно выполнить перенос записей из родительской таблицы в
ее разделы. Для этого предназначена функция
split_table. Для снижения нагрузки на СУБД записи переносятся по отдельности, при этом можно задать время ожидания между переносом каждой записи.
После выполнения указанных действий с секционированной таблицей можно продолжать работать как с обычной таблицей.
Подробнее о секционировании можно почитать в документации PostgreSQL https://postgrespro.ru/docs/postgrespro/9.5/ddl-partitioning.
management-команды
Пакет также содержит management-команды, которые позволяют упростить процесс применения секционирования.
Зависимости
- Django 2.2+
Установка
Необходимо добавить django_postgres_partitioning в settings.INSTALLED_APPS.
Инициализация и применение секционирования
Проинициализировать, если это необходимо, средства секционирования и включить
секционирования для конкретной таблицы можно с помощью команды apply_partitioning:
$ ./manage.py apply_partitioning app_label model_name field_name
где app_label -- лейбл приложения, model_name -- имя модели, а field_label -- название поля.
field_name выступает в качестве ключа секционирования.
Перенос записей из родительской таблицы в ее разделы
Разбить все данные в родительской таблице по ключу секционирования и перенести в соответствующие
секции можно с помощью management-команды split_table:
$ ./manage.py split_table app_label model_name field_name --timeout 5
--timeout задает время ожидания между переносом каждой записи из родительской таблицы
в соответствующую секцию.
Работа над пакетом
Подготовка среды разработки
Необходимый набор инструментов:
tox— оркестрация окружений и запуск командtox-uv— для управлениями окружениями в toxtox-docker— для запуска инфраструктурных сервисов, необходимых в тестах
Быстрый старт
- Установите необходимые инструменты:
.. code-block:: bash
uv tool install tox --with tox-uv --with tox-docker
- Клонируйте репозиторий и перейдите в директорию проекта:
.. code-block:: bash
git clone ssh://git@stash.bars-open.ru:7999/edubase/django-postgres-partitioning.git
cd django-postgres-partitioning
- Запустите тесты и проверки:
.. code-block:: bash
tox
Проверка качества и форматирование кода
.. code-block:: bash
tox -e lint
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_postgres_partitioning-1.3.0-py3-none-any.whl.
File metadata
- Download URL: django_postgres_partitioning-1.3.0-py3-none-any.whl
- Upload date:
- Size: 20.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75a99e80fbd503d430acd6019139e04532609cc565eff23f33114877edd05c64
|
|
| MD5 |
f20b31f3811b8a629c53ae54ab818ef2
|
|
| BLAKE2b-256 |
ea9e14894f2f694dfd5f179ffca35274f3796a5053f22ff60ee3763d31f5fccd
|