linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux数据库 >

使用PostgreSQL存储时序数据

时间:2017-12-05  来源:未知  作者:admin666

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

好,就这些了,希望对你有帮助。

Ubuntu 16.04 下安装 PostgreSQL 和 phpPgAdmin  http://www.linuxidc.com/Linux/2016-08/134260.htm

Linux下RPM包方式安装PostgreSQL  http://www.linuxidc.com/Linux/2016-03/128906.htm

Linux下安装PostgreSQL  http://www.linuxidc.com/Linux/2016-12/138765.htm

Linux下PostgreSQL安装部署指南  http://www.linuxidc.com/Linux/2016-11/137603.htm

Linux下安装 PostgreSQL 并设置基本参数  http://www.linuxidc.com/Linux/2016-11/137324.htm

Ubuntu 16.04 下 PostgreSQL 主从复制配置  http://www.linuxidc.com/Linux/2017-08/146190.htm

Fedota 24 将数据库升级到 PostgreSQL 9.5  http://www.linuxidc.com/Linux/2016-11/137374.htm

CentOS7安装配置PostgreSQL9.6  http://www.linuxidc.com/Linux/2017-10/147536.htm

CentOS5.8_x64下离线安装PostgreSQL 9.1  http://www.linuxidc.com/Linux/2017-10/147822.htm

CentOS 6.5下PostgreSQL服务部署  http://www.linuxidc.com/Linux/2017-01/139144.htm

上一篇:Oracle 游标处理
友情链接