【发布时间】:2021-05-26 12:23:20
【问题描述】:
这个问题几乎说明了一切。我正在尝试从具有联合主键的表中使用 TimescaleDB 创建一个超表:
CREATE TABLE cars
(
id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY,
time_bought TIMESTAMP NOT NULL,
brand VARCHAR(100),
);
ALTER TABLE cars ADD CONSTRAINT PK_id_time_bought PRIMARY KEY(id, time_bought);
SELECT create_hypertable('cars', 'time_bought');
当我尝试通过 Intellij 使用 Java 运行它时,我得到了这个错误:
SQL State : 42883
Error Code : 0
Message : ERROR: function create_hypertable(unknown, unknown) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Position: 8
Location : db/migration/tenants/V1__init_schema.sql (C:\example\target\classes\db\migration\tenants\V1__init_schema.sql)
Line : 45
Statement : SELECT create_hypertable('cars', 'time_bought')
更新:我尝试在不将任何主键放入表中的情况下运行迁移,但它仍然给出相同的错误。问题可能是 Flyway 根本不支持 TimescaleDB 函数吗?如果是这样,我该如何解决?
【问题讨论】:
-
该问题可能与未找到该功能有关。至少我没有从上面的代码中看到错误的任何其他原因。调用
\dx查看这个数据库是否安装了TimescaleDB(需要在每个数据库中安装)。您在公共架构中吗? -
@k_rus 但是当我在 Postgres GUI (PGadmin 4) 中运行相同的功能时,它没有给出任何错误。我不在公共架构中,我在一个名为 schema_1 的架构中。
-
您的意思是在您的环境中,在调用函数时显式提供
public架构名称不起作用? -
@k_rus 好吧,显然不是,它有效!非常感谢,我的问题解决了。
-
修复好了。稍后我会根据上面的讨论给出如何处理此类错误的答案。
标签: java postgresql timestamp timescaledb hypertable