从CSV文件更新PostgreSQL表

时间:2016-10-28 10:22:54

标签: postgresql csv copy foreign-data-wrapper postgres-fdw

我试图找到一种方法来自动更新PostgreSQL表上的csv文件中的数据。

csv文件包含LabVIEW测试数据,每次执行都会更新,并存储在本地计算机上。

到目前为止,我可以将csv中的数据导入表格&test; test1'使用2种方法:

  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');
    
  3. 从那里我可以使用

    将数据插入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文件直接自动更新表的方法?

1 个答案:

答案 0 :(得分:0)

您不能在外表上放置触发器,但....

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

相关问题