【问题标题】:TIMESCALEDB schema issuesTIMESCALEDB 架构问题
【发布时间】:2021-08-12 09:40:07
【问题描述】:

我正在尝试在 timescale db 中创建列以匹配我在 GoLANG 中的类型结构。下面是我的类型结构和我的表/超表的代码。有谁知道我做错了什么?

    type Trade struct {
    A int16     `json:"a"`
    B int16     `json:"b"`
    Ev string   `json:"ev"`
    P int16    `json:"p"`
    Sym string  `json:"sym"`
    S int16     `json:"s"`  
    T int64     `json:"t"`
}




creatX  := `CREATE EXTENSION IF NOT EXISTS timescaledb;`
creatT  := `CREATE TABLE IF NOT EXISTS trade (id SERIAL PRIMARY KEY, a INT, b INT, ev TEXT, sym TEXT, s INT, t INT, p DECIMAL);`


//Table schema 
tradeHypertable := `CREATE TABLE trade_data (
    time TIMESTAMPTZ NOT NULL,
    a INT NOT NULL,
    b INT NOT NULL, 
    ev TEXT NOT NULL, 
    sym TEXT NOT NULL, 
    s INT NOT NULL, 
    t INT NOT NULL, 
    p DECIMAL NOT NULL
    );
    SELECT create_hypertable('trade_data', 'time', 
    a INT,
    b INT, 
    ev TEXT, 
    sym TEXT, 
    s INT, 
    t INT, 
    p DECIMAL if_not_exists => TRUE);
    `

我收到此错误无法将样本插入时间刻度错误:

syntax error at or near "INT" (SQLSTATE 42601)
exit status 1

这里可能有很多问题,请不吝赐教。

【问题讨论】:

  • 我是 timesacledb 的新手。但我注意到您将结构中的P 字段表示为int16,但表有p DECIMAL。这是预期的吗?
  • 检查create_hypertable的语法。您只提供表名,它的列是时间分区列。您无需为此函数提供列,因为它们是从原始表中发现的。
  • @advayrajhansa 我会纠正的。至于现在它只是一个 int。
  • @k_rus 我确实从关系表中选择了列,对吧?
  • 您只需在创建表语句之后运行SELECT create_hypertable('trade_data', 'time')。我是否正确理解您的 create hypertable 语句出现错误?

标签: go timescaledb


【解决方案1】:
tradeHypertable := `CREATE TABLE IF NOT EXISTS trade_data (
    time TIMESTAMPTZ NOT NULL,
    a INT, 
    b INT, 
    ev TEXT, 
    sym TEXT, 
    s INT,
    t BIGINT, 
    p DECIMAL);
    SELECT create_hypertable('trade_data', 'time'); 
    `

trdInsert := `INSERT INTO trade_data (time,  a, b, ev, sym, s, t, p) VALUES  ($1, $2, $3, $4, $5, $6, $7, $8)`

trdInsert 是正确的语法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 2012-11-25
    • 2018-05-26
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多