对于timescaledb来说是一个非常新的东西,我正在努力使用迁移脚本。我正在尝试使用SQLAlchemy为Flask应用程序创建迁移。

假设我创建了一个表(如timescaledb docs中所示),如下所示:

CREATE TABLE conditions (
  time        TIMESTAMPTZ       NOT NULL,
  location    TEXT              NOT NULL,
  temperature DOUBLE PRECISION  NULL,
  humidity    DOUBLE PRECISION  NULL
);


要添加超表,我的升级迁移脚本应执行以下操作:

SELECT create_hypertable('conditions', 'time');


降级部分应该是什么样的?
他们从timescaledb docs中建议:

DROP table conditions;


但是我不希望整个表被删除,如果有意义的话,只希望删除“ hypertable”部分。也许这很愚蠢和毫无意义,我想通过我们的迁移提供一种摆脱timescaledb的方法。我已经读过这样的问题:Creating Hypertables through SQL Alchemy那里似乎没有为SQLAlchemy提供特定的支持,并且它们建议触发器来创建超表而不是特定的迁移。

你有什么建议?

最佳答案

您需要迁移和删除。超表不仅是我们附加在基础表之上的一些附加信息,而且是数据的不同分区/组织。

因此,在上面的命令中,当您在创建表后立即调用create_hypertable时,表中还没有任何数据,因此我们只是在模式定义等方面进行更改。但是,如果在已经有数据的表上调用create_hypertable(对migrate_data命令使用显式的create_hypertable参数[1]),我们需要迁移数据(这涉及将数据从现有表复制到新表中)。我们创建的内部块/表。

因此,将其“迁移回”标准表将再次涉及在超表内部移动数据,因此,这实际上类似于仅创建一个新的标准表,将数据从超表复制到标准表,然后删除该超表。

[1] https://docs.timescale.com/latest/api#create_hypertable

关于flask - 将 super 表转换为常规的postgres表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57910070/

10-15 09:05