Проблемы со схемой TIMESCALEDB

Я пытаюсь создать столбцы в базе данных временной шкалы, чтобы они соответствовали моей структуре типа в 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

Здесь, наверное, много вопросов, пожалуйста, просветите меня.


person Teamunicorn    schedule 24.05.2021    source источник
comment
Я новичок в timesacledb. Но я заметил, что вы представляете поле P в структуре как int16, но в таблицах есть p DECIMAL. Ожидается ли это?   -  person advay rajhansa    schedule 24.05.2021
comment
Проверьте синтаксис create_hypertable. Вы указываете только имя таблицы, столбец которой является столбцом раздела времени. Вы не предоставляете столбцы для этих функций, так как они обнаружены в исходной таблице.   -  person k_rus    schedule 24.05.2021
comment
@advayrajhansa, я исправлю это. На данный момент это просто int.   -  person Teamunicorn    schedule 24.05.2021
comment
@k_rus Я выбираю из реляционной таблицы столбцы, верно?   -  person Teamunicorn    schedule 24.05.2021
comment
Вам нужно запустить только SELECT create_hypertable('trade_data', 'time') после оператора создания таблицы. Правильно ли я понимаю, что вы получаете сообщение об ошибке для оператора создания гипертаблицы?   -  person k_rus    schedule 24.05.2021
comment
понял спасибо за направление!   -  person Teamunicorn    schedule 24.05.2021


Ответы (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 - правильный синтаксис

person Teamunicorn    schedule 24.05.2021