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$;