table 中不存在密钥,但它是 | PostgreSQL, timescaledb
Key is not present in table, but it is | Postgresql, timescaledb
我有下一个数据库。
CREATE TABLE DataLines(
id BIGSERIAL NOT NULL,
TimeStamp TIMESTAMP NOT NULL,
PRIMARY KEY (id, timestamp)
);
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY ,
valueInt BIGINT NOT NULL ,
dataLineId BIGSERIAL ,
timestamp TIMESTAMP NOT NULL ,
FOREIGN KEY (datalineid, timestamp) REFERENCES DataLines(id, timestamp)
);
当我尝试在其中插入一些值时,我收到错误消息“table 中不存在密钥”,但它确实存在,我已经查过了!我什至尝试直接从 datalines
写入 spnvalues
,但收到同样的错误。
有什么问题?
UPD
我从 DataLines
.
创建了 hypertable
SELECT create_hypertable('datalines', 'timestamp');
Foreign key constraints referencing a hypertable are not supported.
我试过独特的约束,但也没有成功。
所以,我找到解决这个问题的唯一方法是删除 SpnValues 中的 foregein 键
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY,
valueInt BIGINT NOT NULL ,
dataLineId BIGSERIAL NOT NULL ,
timestamp TIMESTAMP NOT NULL
);
旧版本
datalineid
也必须是 NOT NULL
,与 timestamp
相同。
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY ,
valueInt BIGINT NOT NULL ,
dataLineId BIGSERIAL NOT NULL ,
timestamp TIMESTAMP NOT NULL ,
FOREIGN KEY (datalineid, timestamp) REFERENCES DataLines(id, timestamp)
);
原因可能是您提供的 TimeStamp
值不够精确。内部时间戳精确到微秒,即您的值文字必须如下所示 '2021-12-15 14:19:20.248137'
。因此 运行 下面的查询提取所有 TimeStamp
数字并重试。
select id, to_char(TimeStamp, 'yyyy-mm-dd hh24:mi:ss.us')
from datalines;
示例输出:
id
to_char
1
2021-12-15 14:19:20.248137
2
2021-12-14 14:19:20.248137
我试过了
insert into SpnValues (valueInt, dataLineId, TimeStamp)
values (10, 2, '2021-12-14 14:19:20.248137');
并且有效。毫秒精度(3 位数)它失败了。
我有下一个数据库。
CREATE TABLE DataLines(
id BIGSERIAL NOT NULL,
TimeStamp TIMESTAMP NOT NULL,
PRIMARY KEY (id, timestamp)
);
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY ,
valueInt BIGINT NOT NULL ,
dataLineId BIGSERIAL ,
timestamp TIMESTAMP NOT NULL ,
FOREIGN KEY (datalineid, timestamp) REFERENCES DataLines(id, timestamp)
);
当我尝试在其中插入一些值时,我收到错误消息“table 中不存在密钥”,但它确实存在,我已经查过了!我什至尝试直接从 datalines
写入 spnvalues
,但收到同样的错误。
有什么问题?
UPD
我从 DataLines
.
SELECT create_hypertable('datalines', 'timestamp');
Foreign key constraints referencing a hypertable are not supported.
我试过独特的约束,但也没有成功。
所以,我找到解决这个问题的唯一方法是删除 SpnValues 中的 foregein 键
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY,
valueInt BIGINT NOT NULL ,
dataLineId BIGSERIAL NOT NULL ,
timestamp TIMESTAMP NOT NULL
);
旧版本
datalineid
也必须是 NOT NULL
,与 timestamp
相同。
CREATE TABLE SpnValues(
id BIGSERIAL NOT NULL PRIMARY KEY ,
valueInt BIGINT NOT NULL ,
dataLineId BIGSERIAL NOT NULL ,
timestamp TIMESTAMP NOT NULL ,
FOREIGN KEY (datalineid, timestamp) REFERENCES DataLines(id, timestamp)
);
原因可能是您提供的 TimeStamp
值不够精确。内部时间戳精确到微秒,即您的值文字必须如下所示 '2021-12-15 14:19:20.248137'
。因此 运行 下面的查询提取所有 TimeStamp
数字并重试。
select id, to_char(TimeStamp, 'yyyy-mm-dd hh24:mi:ss.us')
from datalines;
示例输出:
id | to_char |
---|---|
1 | 2021-12-15 14:19:20.248137 |
2 | 2021-12-14 14:19:20.248137 |
我试过了
insert into SpnValues (valueInt, dataLineId, TimeStamp)
values (10, 2, '2021-12-14 14:19:20.248137');
并且有效。毫秒精度(3 位数)它失败了。