MagicStack / MagicStack/asyncpg

Add support for PGOPTIONS environment variable

Offen
#1,070 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
8.1k
Forks
468
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in asyncpg/connect_utils.py, wo die vorhandenen PG-Umgebungsvariablen gelesen werden, und vergleiche das angeforderte Verhalten mit der Dokumentation zu den PostgreSQL-libpq-Umgebungsvariablen. Führe die bereitgestellte Reproduktion test_asyncpg_timeout.py mit gesetztem PGOPTIONS aus; erledigt ist die Aufgabe, wenn PGOPTIONS-Werte als Servereinstellungen interpretiert werden und sich das statement_timeout-Beispiel wie psql verhält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
postgresql, python
Bereich
databases
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
52/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.