примерное количество строк в postgresql django - PullRequest
0 голосов
/ 20 октября 2018

У меня есть база данных postgresql, связанная с django.В базе данных есть много больших таблиц, которые я хочу, чтобы их количество строк.Из-за большого размера таблиц выполнение занимает много времени.

Я обнаружил, что приблизительное число может быть получено из pg_class.Есть ли способ сделать это в Django и не выполнять необработанный запрос?

1 Ответ

0 голосов
/ 20 октября 2018

Я предлагаю использовать для этого специальный пакет с именем django-postgres-fuzzycount [GitHub] .Этот пакет предоставляет менеджер, который будет выполнять быстрый подсчет.

Вы можете установить пакет с помощью pip (например, в вашей локальной среде):

$ pip install django-postgres-fuzzycount

Затем вы можете добавить`` к моделям, где вы хотите получить приблизительный счет:

from django.db import models
from fuzzycount import <b>FuzzyCountManager</b>

class SomeModel(models.Model):

    #  ... (some fields) ...

    objects = models.Manager()
    <b>approx</b> = FuzzyCountManager()

, а затем вы можете приблизительный счет с помощью:

SomeModel.approx.count()

В случае, если вы .filter(..), Django рассчитает действительное число, поскольку в таблице pg_class хранится только приблизительно число строк для таблицы вся , поэтому:

SomeModel.approx.filter(foo=bar).count()

займет больше времени (в зависимости от индексов и т. д.).

Вы также можете напрямую "пропатчить" менеджера objects, но затем получить количество записей real может быть сложнее:

from django.db import models
from fuzzycount import FuzzyCountManager

class SomeModel(models.Model):

    #  ... (some fields) ...

    <b>objects</b> = FuzzyCountManager()

Также приятно, что если вы измените внутреннюю базу данных на другую, FuzzyCountManager(..) будет действовать как normal Manager, поэтому, если вы позже измените систему базы данных, вы сделаетене надо переписывать менеджеров.

...