Postgres无法创建指向SERIAL类型的外键问题咨询
解决Postgres外键约束无法创建的问题
你碰到的这个报错,核心原因是外键字段和引用的主键字段类型不匹配:
Foo表的ID是SERIAL类型,本质对应Postgres的integer(整数)类型File表的FooId却是TEXT(文本)类型,两种类型无法建立外键关联
修正后的SQL代码
只需要把File表的FooId改成和Foo.ID一致的整数类型即可:
CREATE TABLE Foo (ID SERIAL PRIMARY KEY); CREATE TABLE File (FooId INTEGER NOT NULL REFERENCES Foo (ID));
额外补充(如果有特殊业务需求)
要是你的场景确实需要FooId存储文本格式的ID,可以参考两种可选方案:
- 方案一:把
Foo表的主键改成TEXT类型(不推荐,整数主键的查询、存储性能更优)CREATE TABLE Foo (ID TEXT PRIMARY KEY); CREATE TABLE File (FooId TEXT NOT NULL REFERENCES Foo (ID)); - 方案二:保留整数主键,
File表仍用整数类型的FooId,如果需要显示文本格式,查询时再做类型转换即可
内容的提问来源于stack exchange,提问作者rogerdpack
相关产品推荐
相关产品推荐

