Driver pro PostgreSQL a odstranění zbytečných a opakujících se dotazů na OID

mpavlikcz
Člen | 1
+
0
-

Řešil jsem problém dotazování PostgreSQL databáze a opakovaných dotazů do katalogu na název a typ sloupce. Zejména pro vzdálené připojení PSQL serveru v jiné lokalitě je to velký problém kvůl latenci.

Desítky zbytečných dotazů prodlužují session na nepoužitelnou míru. V logu PSQL jsou vidět shluky podobných dotazů:
2025–09–29 09:22:11.070 GMT [20138] LOG: duration: 0.261 ms statement: SELECT TYPNAME FROM PG_TYPE WHERE OID=1700
2025–09–29 09:22:11.081 GMT [20138] LOG: duration: 0.074 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.092 GMT [20138] LOG: duration: 0.074 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.103 GMT [20138] LOG: duration: 0.070 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.114 GMT [20138] LOG: duration: 0.071 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.125 GMT [20138] LOG: duration: 0.069 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.136 GMT [20138] LOG: duration: 0.066 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.148 GMT [20138] LOG: duration: 0.069 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.159 GMT [20138] LOG: duration: 0.068 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.170 GMT [20138] LOG: duration: 0.070 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.184 GMT [20138] LOG: duration: 0.087 ms statement: SELECT TYPNAME FROM PG_TYPE WHERE OID=1700
2025–09–29 09:22:11.198 GMT [20138] LOG: duration: 0.070 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739
2025–09–29 09:22:11.209 GMT [20138] LOG: duration: 0.068 ms statement: SELECT RELNAME FROM PG_CLASS WHERE OID=37739

Vyřešil jsem to kompletním přepsáním PgSqlDriveru. Session provede jeden komplexní dotaz do katalogu a vrátí Nette mapu názvů a typů. Celková délka session se výrazně zkrátí. Už žádné opakované dotazy na stejné OID.

Rád bych přispěl do komunity. Jak?

h4kuna
Backer | 741
+
+1
-

Ahoj,
přispět můžeš, balíček nette/database udělej si fork a pak je to klasický vývoj.
Zanes změny do větve, udělej testy, pipeline (gihub actions) musí být zelené, potom pošli pull request.