Hirdetés

Új hozzászólás Aktív témák

  • kw3v865

    senior tag

    Üdv!

    Van egy PostgreSQL-ben megírt függvényem (ennek tartalma most szerintem lényegtelen), melynek a teljesítményét kívánom tesztelni. Ez a függvény meg lesz majd hívva folyamatosan egymás után több ezerszer, értelemszerűen változó argumentumokkal. Ennek a teljesítményét szeretném most tesztelni. A lényeg: valahogy szimulálni akarom, hogy a valóságban nagyjából milyen gyorsan fut majd le a folyamat, ha több 1000-szer meghívom egymás után a függvényt.
    Ehhez rendelkezésemre áll egy tábla, melyben a benne lévő adatokkal tudnám is tesztelni a függvényt. Tehát a terv az lenne, hogy írok egy függvényt, ami végigmegy egy FOR-ral az összes rekordon, kiszedi a felhasznákalandó értékeket változókba, és minden alkalommal meghívja a függvényemet úgy, hogy argumentumként ezeket a változókat adom meg.

    Szerintetek jó az elgondolás?

    Íme kódom:

    CREATE OR REPLACE FUNCTION sqlteszt()
    RETURNS void
    LANGUAGE 'plpgsql'
    AS $BODY$
    DECLARE
    i integer;
    x double precision;
    y double precision;
    datetime timestamp without time zone;
    BEGIN
    FOR i IN SELECT id FROM proba
    LOOP
    SELECT p.x, p.y, p.datetime FROM proba p WHERE p.id=i
    INTO x, y, weedpercent, datetime;
    PERFORM masikfuggveny(x,y,datetime,true,false,false,true,false);
    END LOOP;
    END;
    $BODY$;

    Nem csinál semmit így, azaz lefut, de semmi hatása nincs (egyébként insert-eket is csinál, de az most lényegtelen). Ha a "masikfuggveny"-t csak simán meghívom tetszőleges bemeneti paraméterekkel, akkor tökéletesen működik.
    Ha a PERFORM helyett SELECT-tel hívom meg a "masikfuggveny"-t, akkor ezt a hibaüzenetet kapom (pedig az is void, azaz nincs visszatérési értéke):
    ERROR: query has no destination for result data
    HINT: If you want to discard the results of a SELECT, use PERFORM instead.

    Van valami ötletetek mi okozhatja a problémát?

Új hozzászólás Aktív témák