Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

register_vector leaks dumper classes on every call

Ouverte
#168 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
55/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
postgresql, python
Domaine
backend, databases

Piste de recherche

Start with register_vector_info and the dumper classes in pgvector/psycopg/vector.py, then compare their registration with psycopg’s hstore.py example linked in the issue. Use the supplied reproduction with psycopg’s C extension to check class counts before and after repeated calls; done means the dumper classes are no longer retained after contexts are deleted.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Hi!
Investigating a memory leak in our API, we found out that register_vector (and register_vector_async) creates 8 classes on every call that are never garbage collected if psycopg's C extension is in use, even after the connection is closed.

This is because these classes are stored by psycopg in a dict shared by the whole python process, and never cleared.

pgvector python 0.4.2 (but the code has not been updated on master) and psycopg 3.3.2

To reproduce:

import gc
from types import SimpleNamespace

import psycopg
from pgvector.psycopg.vector import (
    VectorBinaryDumper,
    VectorDumper,
    register_vector_info,
)
from psycopg.adapt import AdaptersMap
from psycopg.types import TypeInfo


def count() -> int:
    gc.collect()
    return sum(
        1
        for base in (VectorDumper, VectorBinaryDumper)
        for c in base.__subclasses__()
        if c.__name__ == ""
    )


print(psycopg.__version__, psycopg.pq.__impl__)
before = count()
for _ in range(1000):
    ctx = SimpleNamespace(adapters=AdaptersMap(psycopg.adapters))
    register_vector_info(ctx, TypeInfo("vector", 16385, 16386))
    del ctx
print("leaked dumper classes:", count() - before)  # expected 0, prints 2000

Caching these classes as done by psycopg could fix the issue : https://github.com/psycopg/psycopg/blob/99356800e90aa0e7b604f652d714ef0f33422b47/psycopg/psycopg/types/hstore.py#L225

Langage dominant
Python
Étoiles
1.5k
Forks
100
Merge moyen
13 min
PR mergées (30 j)
1

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de pgvector/pgvector-python

Toutes les issues de pgvector/pgvector-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.