PostgreSQL - Toegevoegde functies

Inhoudsopgave
Geaggregeerde functies zijn een zeer nuttig type functie in databases, hoewel de meeste de basis ANSI-SQL-functies behandelen, zoals MIN (), MAX (), AVG (), SOM (), COUNT ().
In PostgreSQL we hebben de mogelijkheid om onze eigen geaggregeerde functies te creëren, zodat we kunnen zeggen dat PostgreSQL een van de meest aanpasbare databases op de markt is.
Net als bij functies van andere typen, kunnen de aggregaten worden geschreven in andere talen die worden ondersteund door PostgreSQL.
Een aggregatiefunctie bouwen
Zoals we aan het begin vermeldden, kunnen we de geaggregeerde functies in bijna elke taal schrijven, inclusief SQL. Deze functies zijn over het algemeen samengesteld uit een of meer functies, ze moeten ten minste één statusovergangsfunctie hebben om de berekening uit te voeren en optionele functies om de begin- en eindstatus, we kunnen zelfs verschillende talen gebruiken voor elk van deze functies, bijvoorbeeld de functie a in PL / pgSQL en de functie b in PL / Python, enz.
Laten we eens kijken naar de structuur die een aggregatiefunctie moet volgen:
 CREATE AGGREGATE myagg (datatype_of_input) (SCUC = state_function_name, STYPE = state_type, FINALFUNC = final_func_name, INITCOND = optional_init_state_value); 

Waar de laatste functie optioneel is, maar als we deze specificeren, moet deze als invoer of invoer het resultaat van de toestandsfunctie nemen. Deze statusfunctie neemt altijd als invoer het datatype en het resultaat van de laatste aanroep van de statusfunctie; geaggregeerde functies kunnen ook uit meerdere kolommen bestaan.
Hoewel de functies die kunnen worden gebruikt en gemaakt vrij eenvoudig zijn, kunnen we creatief worden en echte kunstwerken maken die complexiteit met zich meebrengen.
We gaan een meetkundig gemiddelde functie uitvoeren om het vermogen aan te tonen van: PostgreSQL bij het uitvoeren van complexere aggregatiefuncties.
Voor deze functie die we zullen doen, zullen we twee functies gebruiken, een die de statusfunctie zal zijn die de gegevens aan een log zal toevoegen en een exponentiële finale die de logs opnieuw zal converteren.
Laten we in de volgende afbeelding de statusfunctie bekijken:

Deze statusovergangsfunctie ontvangt twee parameters van de vorige status als een eendimensionale array met twee elementen en ook het volgende element in het aggregatieproces, als het element nul of nul is, keert de statusfunctie terug naar de vorige status, van een andere form retourneert een array waarbij het eerste element de logaritmische som is en het tweede de huidige telling.
In de volgende functie nemen we de som van de toestandsfunctie en delen deze door het aantal:

Omdat we onze functies hebben die alle berekeningen doen, gaan we beide stukken samenvoegen om onze aggregatiefunctie te genereren:

VERGROTEN

Zoals we konden zien, was de implementatie van de aggregatiefunctie vrij eenvoudig, natuurlijk is de logica erachter niet zo eenvoudig, maar op deze manier zien we hoe volledig de ondersteuning van PostgreSQL op deze niveaus. We hadden zonder probleem andere talen kunnen gebruiken.
Hiermee ronden we deze tutorial af, we hebben al een bredere kennis over de functies in PostgreSQL en op deze manier kunnen we onze database uitbreiden naar nieuwe niveaus die onze applicaties veel robuuster en functioneler maken.
wave wave wave wave wave