Postgresql

如何在 postgresql 函式中輸出 json 文件?

  • January 23, 2018

我想在更新 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 表示是 just row_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將在數據目錄中創建。

引用自:https://dba.stackexchange.com/questions/195995