操作系統 :CentOS7.3.1611_x64 PostgreSQL版本 :9.6 問題描述 在InfluxDB中存儲時序數據時,當tag值和時間戳都相同時會執行覆蓋操作。在PostgreSQL中能不能這麼用呢? 解決方案 可以藉助唯一索引和update來實現,這裡記錄下以備後用。 1、創建帶有唯 ...
操作系統 :CentOS7.3.1611_x64
PostgreSQL版本 :9.6
問題描述
在InfluxDB中存儲時序數據時,當tag值和時間戳都相同時會執行覆蓋操作。在PostgreSQL中能不能這麼用呢?
解決方案
可以藉助唯一索引和update來實現,這裡記錄下以備後用。
1、創建帶有唯一索引的表,比如:
drop table if exists stock_data; create table stock_data ( id bigserial primary key, stock_id varchar(32), trans_date date, open_price decimal, close_price decimal ); create unique index stock_idx on stock_data(stock_id,trans_date);
這裡創建一個stock_data表,並創建唯一索引stock_idx。
2、寫入數據
insert into stock_data (stock_id,trans_date,open_price,close_price) values ('sh000001',date '19901219',96.05,99.98);
但上述代碼第二次執行時會報錯,可以通過如下方式解決這個問題並實現數據的寫入:
insert into stock_data (stock_id,trans_date,open_price,close_price) values ('sh000001',date '19901219',196.05,199.98) on conflict(stock_id,trans_date) do update set open_price=excluded.open_price,close_price=excluded.close_price;
好,就這些了,希望對你有幫助。
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20171118_使用PostgreSQL存儲時序數據.rst
歡迎補充