问题标签 [timescaledb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1904 浏览

performance - timescaledb 索引是否与 postgreSQL 一样工作?

我正在为时间序列数据测试一个名为 Timescaledb 的 PostgreSQL 扩展。如果我正确阅读了PostgreSQL的文档,例如查询

最适合使用 index (x,timestamp)。并EXPLAIN在该 SQL 查询上运行表明它有效。

当我在 Timescaledb 超表上尝试相同的查询时,它包含相同的数据且没有索引(x,timestamp)。性能大致相同(如果不是更好)。创建索引后(x,timestamp),性能并没有提高。

我知道超表有一个内置的时间戳索引。所以,我应该有一个不同的策略来向表中添加索引,例如只使用(x). 那正确吗?

0 投票
2 回答
1718 浏览

python - 通过 SQL Alchemy 创建 Hypertables

我们当前的项目严重依赖 SQL Alchemy 来创建表/插入数据。我们想切换到 timescaledb 的超表,但似乎推荐的创建超表的方法是执行

create_hypertable

命令。我需要能够动态创建表,因此为创建的每个表手动执行此操作并不是一个真正的选择。处理转换的一种方法是运行 python 脚本发送 psycopg2 命令将所有新创建的表转换为超表,但这似乎有点笨拙。timescaledb 在创建超表方面是否提供与 SQL Alchemy 的任何集成?

0 投票
3 回答
517 浏览

postgresql - Timescale 在 AMI 上找不到 pg_config

我在 AWS Cloud9 中创建了一台机器,我想在该实例上安装 timescale。我以前使用 yum 安装和设置过 postgres 9.6。

操作系统版本为:

Amazon Linux AMI 版本 2018.03

.

当我运行' which pg_config'时,它在这里找到:

/usr/bin/pg_config

查看时间刻度网站上的安装说明,我想出了这个:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-ami201503-96-9.6-2.noarch.rpm

wget https://timescalereleases.blob.core.windows.net/rpm/timescaledb-0.9.2-postgresql-9.6-0.x86_64.rpm

sudo yum install timescaledb-0.9.2-postgresql-9.6-0.x86_64.rpm

在最后一个命令之后,我收到以下错误:

运行事务安装:timescaledb-0.9.2-0.el7.centos.x86_64
1/1 错误:找不到 pg_config,预计在 /usr/pgsql-9.6/bin/pg_config。请修复并重试。

警告:%post(timescaledb-0.9.2-0.el7.centos.x86_64) scriptlet failed, exit status 1 Non-fatal POSTIN scriptlet failure in rpm package timescaledb-0.9.2-0.el7.centos.x86_64

0 投票
4 回答
6436 浏览

sql - TimescaleDB:有效地选择最后一行

我有一个带有 timescaledb 扩展的 postgres 数据库。

我的主索引是时间戳,我想选择最新的行。

如果我碰巧知道最近一行发生在某个时间之后,那么我可以使用如下查询:

这里我指定一个日期时间,并使用 psycopg2 执行查询:

定时输出:

但是,如果我不知道输入上述查询的时间,我可以使用如下查询:

我以类似的方式执行查询

定时输出:

所以这慢了 8 倍以上。

我不是 SQL 专家,但我原以为查询规划器会发现“限制 1”和“按主索引排序”等同于 O(1) 操作。

问题:

有没有更有效的方法来选择表中的最后一行?

如果它有用,这里是我的表的描述:

0 投票
1 回答
659 浏览

sql - Postgresql / Timescaledb中的分组填补空白

我有来自不同设备的测量,比如说Device_ADevice_B。对于每台设备,我都会测量温度和湿度。有时会丢失部分或全部测量值: +---------------------+-------------+-------------+-------+ | ts | device_type | measurement | value | +---------------------+-------------+-------------+-------+ | 2018-04-30 23:59:59 | Device_A | Temperature | 10.1 | | 2018-04-30 23:59:59 | Device_A | Humidity | 66 | | 2018-04-30 23:59:59 | Device_B | Temperature | 19.1 | | 2018-05-03 23:59:59 | Device_A | Temperature | 12.1 | | 2018-05-03 23:59:59 | Device_B | Humidity | 67 | | 2018-05-03 23:59:59 | Device_B | Temperature | 16.1 | | 2018-05-04 23:59:59 | Device_A | Temperature | 17 | | 2018-05-04 23:59:59 | Device_A | Humidity | 63 | | 2018-05-04 23:59:59 | Device_B | Temperature | 12.1 | | 2018-05-04 23:59:59 | Device_B | Humidity | 73 | +---------------------+-------------+-------------+-------+

我想获得每天的平均温度和湿度,当没有数据时,我希望它为 0(或任何其他任意值) - 有趣的点在 2018-05-01 和 2018-05-02 +---------------------+-------------+-------+ | date | measurement | mean | +---------------------+-------------+-------+ | 2018-04-30 23:59:59 | Humidity | 66 | | 2018-04-30 23:59:59 | Temperature | 14.6 | | 2018-05-01 23:59:59 | Temperature | 0 | | 2018-05-01 23:59:59 | Humidity | 0 | | 2018-05-02 23:59:59 | Temperature | 0 | | 2018-05-02 23:59:59 | Humidity | 0 | | 2018-05-03 23:59:59 | Humidity | 67 | | 2018-05-03 23:59:59 | Temperature | 14.1 | | 2018-05-04 23:59:59 | Humidity | 68 | | 2018-05-04 23:59:59 | Temperature | 14.55 | +---------------------+-------------+-------+

我尝试了此处描述的间隙填充,但在测量列中遇到了 NULL 值。此外,我每天只得到一行,在 NULL 测量中根本没有任何值。理想情况下,我希望每天获得 2 行 - 一行带有温度,一行带有湿度,两者的值都设置为 0。

有没有办法像上面那样生成输出?我知道将数据从“长”格式转换为“宽”格式可以解决我的问题,但想知道是否还有其他解决方案?

我的代码:

输出: +---------------------+-------------+-------+ | date | measurement | mean | +---------------------+-------------+-------+ | 2018-04-30 23:59:59 | Humidity | 66 | | 2018-04-30 23:59:59 | Temperature | 14.6 | | 2018-05-01 23:59:59 | NULL | 0 | | 2018-05-02 23:59:59 | NULL | 0 | | 2018-05-03 23:59:59 | Humidity | 67 | | 2018-05-03 23:59:59 | Temperature | 14.1 | | 2018-05-04 23:59:59 | Humidity | 68 | | 2018-05-04 23:59:59 | Temperature | 14.55 | +---------------------+-------------+-------+

0 投票
0 回答
409 浏览

sql - postgres:无法在模式中删除表,错误提到不相关的模式

我设置了许多模式:

模式:

在每个hg_xxx模式中,我都有许多表(大多数具有通用表名):

hg_quotes_raw:

hg_trade_volume_1m:

我有一张这样的表,hg_trade_volume_1m.hgq8如下所示:

问题:

当我尝试删除此表时,我收到一条错误消息,指出不存在不同的架构:

在这个 drop 语句之后,我的表仍然存在:

问题:

  • 为什么我不能放下这张桌子?
  • 为什么 postgres 在错误消息中提到不同的模式?

笔记:

错误消息中提到的架构曾经存在,但已从数据库中删除。

另请注意,表(和相关的 timescaledb 超表)最初不是在模式中创建的,而是在创建后迁移到模式中。不确定这是否是根本原因?

0 投票
1 回答
708 浏览

postgresql - 如何将我的分钟数据划分为包含 Timescaledb 中每个月的表(PostgreSQL 扩展)

我是 timescaledb 的新手,我想为表中的每只股票存储一分钟的 ohlcv 刻度。一只股票每天产生 1440 个刻度,一个月产生 43200 个刻度。我有 100 个资产,我想每个月存储它们的刻度,并且基本上每 30 天左右将表格划分一次,这样我就不必为这个划分构建复杂的逻辑。关于如何使用 timescale DB 完成此操作的任何建议。

目前,我这样做的方式是

  • 获取传入的刻度(例如时间戳1535090420
  • 将其时间戳四舍五入到最近的 30 天周期(1535090420/(86400 * 30)) = 592.241674383
  • 将此数字四舍五入到592并乘以间隔得到1534464000,这是最近的 30 天存储桶,所有刻度都应该存储在其中所以我创建一个名为OHLC_1534464000的表(如果不存在)并在那里添加刻度
  • 有一个更好的方法吗
0 投票
1 回答
1855 浏览

docker - 问题:如何在带有卷的 ARM 架构上的 Docker 上运行 TimeScaleDB?

如何在 ARM 架构上的 Docker 上运行 TimeScale,并将 Postgres/TimescaleDB 数据卷暴露给主机?

我的想法是执行以下操作:

但是,TimescaleDB 似乎卡在启动/重启过程中:

在此处输入图像描述

你有什么建议/想法我做错了什么?

问题也可以在 Github 上找到:https ://github.com/timescale/timescaledb-docker/issues/23

docker log ( docker logs timescaledb) 告诉以下内容:

跑步

返回相同的错误:standard_init_linux.go:190: exec user process caused "exec format error"

0 投票
1 回答
355 浏览

timescaledb - 具有大型数据集的 timescaledb 的性能

我们正在考虑使用 timescaledb,我们想知道它是否适合存储数据数组的时间序列。一个例子是我们在几个月内每秒记录 4 次 350 次浮点数。然后我们想提取几天或几周的daya。单个条目是 350xfloats = 350x4 字节 = 1.4 KB。一周的价值是 1.4x4x60x60x24x7 = 3.386 GB。

timescaledb 如何处理此类查询?有没有人有存储和提取这样的时间序列数据集的经验?

感谢您的反馈/建议。

安迪

0 投票
1 回答
192 浏览

postgresql - Postgresql - 查询表中的所有时间序列行

上面的查询将查询所有行table_1,同时按列对所有行进行排序time。但是,如果表的大小达到数百万行,那么在添加ORDER BY time. 不过幸运的是,我的表是一个使用TimescaleDB扩展的时序表,所有行都按时插入。

在这种情况下,获取表中所有内容的最有效方法是什么,同时确保生成的查询按time?

我只是删除ORDER BY time吗?如果我删除它,我可以确定生成的查询总是按time?

另外,我听说 PostgreSQL 在获取表中的所有行时存在一些驱动程序问题,因为它针对查询表中的一小部分数据进行了优化。如何优化性能?