2016-10-28 107 views
1

我想找到一種方法來自動更新PostgreSQL表上的csv文件中的數據。從CSV文件更新PostgreSQL表

csv文件包含LabVIEW測試數據,它將在每次執行時更新並存儲在本地計算機上。

到目前爲止,我能夠從CSV導入數據到表 '測試1' 通過兩種方法:

  1. COPY命令

    COPY test1 FROM 'C:\Users\..\Test.csv' DELIMITER E'\t' CSV; 
    
  2. 外國數據包裝(file_fdw)

    CREATE SERVER labview FOREIGN DATA WRAPPER file_fdw; 
    
    CREATE FOREIGN TABLE labview_test (
    column1 text 
    ) 
    SERVER labview OPTIONS (filename 'C:\Users\..\Test.csv', format 'csv'); 
    

從那裏我可以插入數據到test1使用

INSERT INTO test1 (column1) FROM labview_test; 

這是可以的單個更新,但我需要這個過程是自動化的。我嘗試過使用觸發器和觸發函數,並且能夠在外表上創建觸發器,但是當我運行新的LabVIEW測試時,表不會更新。

CREATE FUNCTION copy_test() 
    RETURNS TRIGGER AS $$ 
    BEGIN 
    INSERT INTO test1 VALUES (NEW.column1); 
    RETURN NULL; 
    END $$ LANGUAGE plpgsql; 


    CREATE TRIGGER copy_trigger 
    AFTER INSERT OR UPDATE ON labview_test 
    FOR EACH ROW 
    EXECUTE PROCEDURE copy_test(); 

我在論壇上發帖說file_fdw不支持觸發功能看,任何人都可以證實這一點在PostgreSQL裏(9.6)的最新版本?

有誰知道一種方法來自動從外表或從.csv文件直接自動更新表?

回答

0

你不能把一個觸發一個外部表,但是....

您可以創建一個外部表的物化視圖。然後你可以在物化視圖上放置一個觸發器。最後,您可以讓外部調度程序刷新物化視圖(與數據同時),並且應該使觸發器觸發新數據。