我试图找到一种方法来自动更新PostgreSQL表上的csv文件中的数据。
csv文件包含LabVIEW测试数据,每次执行都会更新,并存储在本地计算机上。
到目前为止,我可以将csv中的数据导入表格&test; test1'使用2种方法:
COPY命令
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');
从那里我可以使用
将数据插入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 :(得分:0)
您不能在外表上放置触发器,但....
您可以创建外表的物化视图。然后,您可以在物化视图上放置触发器。最后,您可以让外部调度程序刷新物化视图(与数据同时),这应该会导致触发器触发新数据。