MagicStack / MagicStack/asyncpg

Add support for PGOPTIONS environment variable

Ouverte
#1,070 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
8.1k
Forks
468
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

asyncpg supports an explicit server_options=... dict connection method parameter, but does not seem to populate its value from the PGOPTIONS environment variable. This is a feature request for it to do so.

Specifically, asyncpg/connect_utils.py reads user, host, port, database, password, and SSL information with calls like os.getenv('PGUSER'), os.environ.get('PGHOST'), etc. There is no corresponding call for reading PGOPTIONS.

I would like to set the environment variable PGOPTIONS='-c default_transaction_read_only=on -c statement_timeout=120s' and have asyncpg interpret its values as server_settings the way libpq does. For instance, the below works for psql:

PGOPTIONS='-c statement_timeout=1s' psql -c "SELECT pg_sleep(2)"
ERROR:  canceling statement due to statement timeout

but a simple asyncpg script running the same ignores the statement_timeout since it never reads the value of PGOPTIONS.

$ PGOPTIONS='-c statement_timeout=1s' ./test_asyncpg_timeout.py 
SELECT 1

https://www.postgresql.org/docs/current/libpq-envars.html

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

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.

Piste de recherche

Commencez dans asyncpg/connect_utils.py, où les variables d’environnement PG existantes sont lues, et comparez le comportement demandé avec la documentation de PostgreSQL sur les variables d’environnement de libpq. Exécutez la reproduction fournie test_asyncpg_timeout.py avec PGOPTIONS défini ; c’est terminé lorsque les valeurs de PGOPTIONS sont interprétées comme des paramètres du serveur et que l’exemple de statement_timeout se comporte comme psql.

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

Évaluation

Stack technique
postgresql, python
Domaine
databases
Type d'issue
Fonctionnalité
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
52/100

Recevez les nouvelles issues par e-mail

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