2016-10-28 106 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

你不能把一个触发一个外部表,但是....

您可以创建一个外部表的物化视图。然后你可以在物化视图上放置一个触发器。最后,您可以让外部调度程序刷新物化视图(与数据同时),并且应该使触发器触发新数据。