我正在寻找一种方法来自动更新PostgreSQL表上的csv文件中的数据。
csv文件保存LabVIEW测试数据,每次执行都会更新,并存储在本地计算机上。
到目前为止,我能够从csv导入数据到表'test1'使用2种方法:
-
复制命令
COPY test1 FROM 'C:Users..Test.csv' DELIMITER E't' CSV;
-
外部数据包装器(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');
INSERT INTO test1 (column1) FROM labview_test;
这是ok的单一更新,但我需要这个过程是自动化的。我尝试使用触发器和触发器函数,我能够在外部表上创建触发器,但是当我运行新的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文件直接?
不能在外部表上设置触发器,但是....
可以创建外表的物化视图。然后,您可以在物化视图上放置一个触发器。最后,您可以使用外部调度器刷新物化视图(与数据并发),这应该会导致触发器触发新数据。