我在postgresql数据库中有三个表,即tec_configurations,tep_cores和tep2tec_bindings。表tec2tep_bindings引用前两个表的主键字段。每个表的相关create语句在下面的sql片段2,3和4中列出。我收到下面第一个片段中指出的错误。你能告诉我如何解决这个错误吗?表TEC_CONFIGURATIONS中的“id”字段已经是唯一的,因为它是主键。所以,我没有理由得到这个错误信息。
SNIPPET 1(错误讯息):
ERROR: there is no unique constraint matching given keys for referenced table
"tec_configurations"
SNIPPET 2(表tec_configurations):
CREATE TABLE IF NOT EXISTS TEC_CONFIGURATIONS (
ID SERIAL PRIMARY KEY,
TEC_ID INT NOT NULL,
HANDLER_MAC TEXT NOT NULL,
PRIMARY_MAC TEXT,
SECONDARY_MAC TEXT,
TERTIARY_MAC TEXT,
EXPECTED_FLOWS INT DEFAULT 0,
VERSION INT DEFAULT 0,
UUID TEXT DEFAULT NULL );
SNIPPET 3(表tep_cores):
CREATE TABLE IF NOT EXISTS TEP_CORES (
ID SERIAL PRIMARY KEY,
MAC TEXT,
UUID TEXT,
CORE_NO INT DEFAULT 0);
SNIPPET 4(表tec2tep_bindings)
CREATE TABLE IF NOT EXISTS TEC2TEP_BINDINGS (
ID SERIAL PRIMARY KEY,
TEC_ID_FK INT NOT NULL REFERENCES TEC_CONFIGURATIONS(ID),
TEP_CORE_ID_FK INT NOT NULL REFERENCES TEP_CORES(ID),
REPLICA_RANK INT DEFAULT 0);
答案 0 :(得分:0)
疯狂猜测,因为您发布了create table if not exists
而不是create table
:其中一个表存在而没有所需的唯一键(例如,缺少主键)。
(如果正确,我会添加这个注释。一些Postgres核心开发人员对添加if exists
和if not exists
构造的想法持敌对态度,因此反对:“当你{应该发生什么时{ {1}},默默地“成功”,并且现有表格的架构与您希望的架构不同?“)