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
Metadata
Release files for django-postgres-partitioning 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_postgres_partitioning-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / django_postgres_partitioning-1.3.0-py3-none-any.whl
| Download URL | django_postgres_partitioning-1.3.0-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
75a99e80fbd503d430acd6019139e04532609cc565eff23f33114877edd05c64
|
|
BLAKE2b-256 checksum How to use checksums |
ea9e14894f2f694dfd5f179ffca35274f3796a5053f22ff60ee3763d31f5fccd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.9.23
|