Skip to main content

Средства для реализации партиционирования таблиц в СУБД PostgreSQL

Project description

partitioning

Пакет содержит набор утилит для применения секционирования.

В настоящее время поддерживается только помесячное разбиение таблиц БД на разделы.

Для использования секционирования таблиц необходимо выполнить следующие шаги:

  1. Проинициализировать средства секционирования для базы данных. Для этого следует выполнить функцию init. Функция должна выполняться ОДИН раз для КАЖДОЙ базы данных, используемых системой. В результате выполнения функции в указанной БД будут созданы необходимые функции для поддержки секционирования.
  2. Включить секционирование для конкретных таблиц с помощью функции set_partitioning. В результате для указанной таблицы будут созданы необходимые триггеры. После этого при добавлении/редактировании записей секционированной таблицы записи будут размещаться в разделах таблицы. Если соответствующие разделы отсутствуют, то они будут создаваться автоматически.
  3. При необходимости, можно выполнить перенос записей из родительской таблицы в ее разделы. Для этого предназначена функция 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 — для управлениями окружениями в tox
  • tox-docker — для запуска инфраструктурных сервисов, необходимых в тестах

Быстрый старт

  1. Установите необходимые инструменты:

.. code-block:: bash

uv tool install tox --with tox-uv --with tox-docker
  1. Клонируйте репозиторий и перейдите в директорию проекта:

.. code-block:: bash

git clone ssh://git@stash.bars-open.ru:7999/edubase/django-postgres-partitioning.git
cd django-postgres-partitioning
  1. Запустите тесты и проверки:

.. 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

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_postgres_partitioning-1.3.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file django_postgres_partitioning-1.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_postgres_partitioning-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 75a99e80fbd503d430acd6019139e04532609cc565eff23f33114877edd05c64
MD5 f20b31f3811b8a629c53ae54ab818ef2
BLAKE2b-256 ea9e14894f2f694dfd5f179ffca35274f3796a5053f22ff60ee3763d31f5fccd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page