kb:pg:balans_modif_functions_data_sync

Postgres, transporter i funkcije koje menjaju podatke

Način na koji sistem za razmenu podataka hvata zapise za žurnal izmena oslanja se na Records Affected svojstvo Jet OLE DB provajdera.
Na žalost, implementacija ovog svojstva u PostgreSQL nije potpuno identična (defakto, standard i ne postoji).

Usled toga, u cilju logovanja poziva Pg funkcijama koje menjaju podatke, neophodno je funkciju napisati tako da:

  • rezultat poziva bude tabela sa jednom kolonom pod nazivom dummy integer tipa

Na primer:

CREATE OR REPLACE FUNCTION bpub.cs3_fixpremestdts(
    )
    RETURNS TABLE(dummy integer)
    LANGUAGE 'sql'

    COST 100
    VOLATILE
    ROWS 1000
AS $BODY$
    WITH jfrom AS (SELECT U.DTStamp,U.ulid FROM Ulaz AS U INNER JOIN Ulaz AS S ON U.Link=S.UlID WHERE U.DTStamp>=S.DTStamp AND U.DocTip IN (SELECT DTID FROM defDocTip WHERE FPrenos))
    UPDATE Ulaz AS AU_U
       SET DTStamp=jfrom.DTStamp-0.00002
    FROM jfrom
    WHERE AU_U.ulid=jfrom.ulid
    RETURNING 1;
$BODY$;

ili ako funkcija nije prost SQL, već treba ručno vratiti pomenutu kolonu:

CREATE OR REPLACE FUNCTION bpub.cs2_set_vaz_period_bulk(
    indocid integer)
    RETURNS TABLE(dummy integer)
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE
AS $BODY$

    ...

    -- kraj
    RETURN QUERY SELECT 1;
END;
$BODY$;
  • kb/pg/balans_modif_functions_data_sync.txt
  • Last modified: 2019/05/11 09:20
  • by milano