Postgresql
如何在 postgresql 函式中輸出 json 文件?
我想在更新 db 表中的記錄時在 postgresql 中定義一個觸發器,它將記錄輸出為 json 文件:
CREATE TABLE mytable( id serial primary key, first_name varchar(40) NOT NULL, last_name varchar(40) NOT NULL ); CREATE OR REPLACE FUNCTION myFunction() RETURNS trigger AS $BODY$ BEGIN // My Code RETURN NEW; END; $BODY$ LANGUAGE plpgsql SECURITY DEFINER; CREATE TRIGGER myTrigger AFTER UPDATE ON mytable FOR EACH ROW EXECUTE PROCEDURE myFunction();
我該怎麼做?
NEW
觸發器中的 JSON 表示是 justrow_to_json(NEW)
,所以這部分很簡單。但是寫入伺服器上的文件是另一回事。它只允許超級使用者使用,因為它可以破壞或破壞所有實例的數據。
我認為文件系統上沒有內置函式,但 contrib 模組adminpack提供了一個:
pg_file_write(filename text, data text, append boolean)
data
會是row_to_json(NEW)
你的情況。該文件應該在數據目錄中,因為:
只能訪問數據庫集群目錄中的文件
儘管我認為如果使用支持符號連結的文件系統,您可以使用符號連結來規避該限制。
這是一個工作範例:
CREATE FUNCTION mytrigger() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN PERFORM pg_catalog.pg_file_write('outputlog', row_to_json(NEW, true)::text, true); return NEW; END $function$
該文件
outputlog
將在數據目錄中創建。