使用PostgreSQL存儲時序數據


操作系統 :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

歡迎補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM