随笔 - 273  文章 - 0  评论 - 283  阅读 - 145万

使用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

欢迎补充

posted on 2017-11-18 21:14  Mike_Zhang  阅读(3989)  评论(0)    收藏  举报
(评论功能已被禁用)
编辑推荐:
· 记一次 ADL 导致的 C++ 代码编译错误
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
· 为什么PostgreSQL不自动缓存执行计划?
· 于是转身独立开发者
· C#.Net筑基-泛型T & 协变逆变
阅读排行:
· C#/.NET/.NET Core优秀项目和框架2025年6月简报
· Cursor 1.2重磅更新,这个痛点终于被解决了!
· C#开发的Panel滚动分页控件(滑动版) - 开源研究系列文章
· 上周热点回顾(6.30-7.6)
· .NET AI 模板
历史上的今天:
2012-11-18 用python扩展snmp
2011-11-18 python中dict和lambda结合的小例子

点击右上角即可分享
微信分享提示