PG-JEV
Vytvořeno: 28.9.2026 | Aktualizováno: 28.09.2026 17:45
PG-JEV je rozšíření pro PostgreSQL, které přidává funkce modelu Jev pro vyhodnocení, filtrování, řazení a klasifikaci řádků přirozeným jazykem. Dotaz nevyžaduje vektorový index, embeddingy ani vektorový sloupec; rozšíření předává celý řádek jako strukturovaný vstup do TypeSafe API.
Princip
Podmínka se předává funkci společně s řádkem. Například následující dotaz vybere z tabulky people osoby, jejichž jméno model vyhodnotí jako evropské:
SELECT * FROM people WHERE jev(people, 'the name is European');
První vyhodnocení konkrétní kombinace tabulky a podmínky spustí read-ahead — rozšíření dopředu načítá řádky a odesílá je ve skupinách do API. U běžných tabulek čte řádky ve fyzickém pořadí pomocí TID rozsahů, u pohledů používá stránkování.
Výchozí dávka obsahuje 20 řádků na API požadavek. Parametr jev.concurrency má ve výchozím nastavení hodnotu 16 a určuje počet souběžných požadavků. Odpovědi ukládá cache v rámci backendové relace podle obsahu řádku.
Dostupné funkce
jev(row, condition [, threshold])vrací boolean hodnotu pro použití veWHERE.jev_prob(row, condition)vrací pravděpodobnost v rozsahu 0 až 1.jev_scoreajev_score_normvrací skóre podle zadaných uspořádaných úrovní.jev_choicevybírá nejpravděpodobnější možnost.jev_confidenceajev_evalzpřístupňují confidence a úplnou odpověď modelu.jev_stats(),jev_cache_clear()ajev_version()slouží ke kontrole statistik, vymazání cache a zjištění verze rozšíření.
Instalace
Rozšíření vyžaduje PostgreSQL ve verzích 14 až 17, jazyk plpython3u, oprávnění superuživatele PostgreSQL a API klíč TypeSafe. Na hostovaných PostgreSQL službách bez superuživatele nebo plpython3u, například Supabase, Neon a RDS, jej nelze provozovat.
Na Debianu nebo Ubuntu je podle dokumentace projektu potřeba nejprve nainstalovat balíček postgresql-plpython3-NN, kde NN odpovídá hlavní verzi PostgreSQL.
Z PGXN
pip install pgxnclient pgxn install jev psql -c "CREATE EXTENSION jev CASCADE"
Ze zdrojových kódů
git clone https://github.com/realZachi/pg-jev.git && cd pg-jev make install psql -c "CREATE EXTENSION jev CASCADE"
Docker
Projekt obsahuje také Docker image. API klíč se předává proměnnou prostředí TYPESAFE_API_KEY.
docker build -t pg-jev . docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=pw \ -e TYPESAFE_API_KEY=your-key pg-jev
Nastavení
Konfigurace používá PostgreSQL GUC parametry. Lze je proto nastavit pomocí SET, ALTER ROLE, ALTER DATABASE nebo v souboru postgresql.conf.
Důležité parametry zahrnují jev.api_key, jev.model, jev.concurrency, velikost dávky, URL API, timeout a keepalive. Výchozí model je jev-latest; lze použít i připnutou verzi, například jev-1.13.0.
Rozšíření obsahuje limity jev.max_rows_per_statement a jev.max_chars_per_statement. Po překročení omezí počet řádků nebo znaků odesílaných v rámci jednoho SQL příkazu. Tyto limity pomáhají chránit náklady na API.
Doporučení pro dotazy
Přesnou shodu, aritmetiku a práci s daty je vhodné nechat v SQL. Jev má řešit až sémantickou část dotazu. Levné SQL podmínky mají být před jev(), aby se řádky vyřazené databází neposílaly do API.
SELECT * FROM people WHERE country = 'CZ' AND jev(people, 'the person works in a technical role');
Pokud tabulka obsahuje mnoho sloupců, je vhodné vytvořit pohled jen s poli potřebnými pro rozhodnutí. Zmenší se tím vstup odesílaný modelu.
LIMIT může zastavit read-ahead dříve, než rozšíření vyhodnotí celou tabulku. Nejde ale o indexové vyhledávání: rozšíření zpracovává řádky, které PostgreSQL executor vyžádá pro vyhodnocení dotazu.
Omezení a bezpečnost
Obsah vyhodnocovaných řádků odchází do API třetí strany. Před nasazením je proto potřeba vyhodnotit, zda data smějí opustit databázový server.
Cache není sdílená mezi backendovými relacemi. Anonymní typ record, který může vzniknout například z některých poddotazů nebo CTE, neumí read-ahead dávkovat a rozšíření jej vyhodnocuje po jednom řádku.
plpython3u je nedůvěryhodný jazyk PostgreSQL. Rozšíření může vytvořit jen superuživatel a jeho funkce běží s oprávněními operačního systému procesu databázového serveru. Instalace proto vyžaduje stejnou obezřetnost jako jiný kód běžící přímo u PostgreSQL.
Vývoj a testování
Regresní testy projektu používají deterministickou mock API, takže nemají volat živé API.
make docker-test make installcheck
Projekt je licencovaný pod PostgreSQL License.