首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加关系(外键)失败

添加关系(外键)失败
EN

Stack Overflow用户
提问于 2019-02-15 07:17:40
回答 1查看 140关注 0票数 0

我正在尝试添加两个表之间的关系(在模式mittschema中)。

下面的MWE显示了生成的错误。

代码语言:javascript
复制
library(data.table)
library(DBI)
con <- dbConnect(RPostgres::Postgres()
                                 , host='localhost'
                                 , port='5432'
                                 , dbname='postgres'
                                 , user="xx"
                                 , password="yy")
tbl01 <- data.table(basket=c(1L, 2L, 3L), fruit=c("Apple", "Orange", "Citrus"))
tbl02 <- data.table(basket=c(1L, 2L, 3L), color=c("Red", "Blue", "Yellow"))
RPostgres::dbWriteTable(con, name=DBI::Id(schema="mittschema", table="tbl01"), value=tbl01, overwrite = TRUE)
RPostgres::dbWriteTable(con, name=DBI::Id(schema="mittschema", table="tbl02"), value=tbl02, overwrite = TRUE)
RPostgres::dbGetQuery(con, "alter table mittschema.tbl01 add primary key (basket)")
RPostgres::dbGetQuery(con, "alter table mittschema.tbl02 add primary key (basket)")
# The following command fails
RPostgres::dbGetQuery(con, "ALTER TABLE mittschema.tbl02 ADD CONSTRAINT lnk_tbl_01_tbl_02 FOREIGN KEY ( Basket ) REFERENCES mittschema.tbl01 ( Basket );")
# Error in result_create(conn@ptr, statement) : 
#    Failed to fetch row: ERROR:  there is no unique constraint matching given keys for referenced table "tbl01"
dbDisconnect(con)

我应该如何编写创建关系的命令?

编辑:由于某些原因,它现在可以工作了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-15 09:37:21

这些行仅仅是给tmp.sql赋值。

代码语言:javascript
复制
tmp.sql <- "alter table mittschema.tbl01 add primary key (basket)"
tmp.sql <- "alter table mittschema.tbl02 add primary key (basket)"
tmp.sql <- "alter table mittschema.tbl01 add constraint unique (basket)"
tmp.sql <- "alter table mittschema.tbl02 add constraint unique (basket)"

在添加外键之前,需要执行这些SQL语句。

代码语言:javascript
复制
tmp.sql <- "alter table mittschema.tbl01 add primary key (basket)"
res <- RPostgres::dbSendQuery(con, tmp.sql)
tmp.sql <- "alter table mittschema.tbl02 add primary key (basket)"
res <- RPostgres::dbSendQuery(con, tmp.sql)
tmp.sql <- "alter table mittschema.tbl01 add constraint unique (basket)"
res <- RPostgres::dbSendQuery(con, tmp.sql)
tmp.sql <- "alter table mittschema.tbl02 add constraint unique (basket)"
res <- RPostgres::dbSendQuery(con, tmp.sql)

res <- RPostgres::dbSendQuery(con, "ALTER TABLE mittschema.tbl02 ADD CONSTRAINT lnk_tbl_01_tbl_02 FOREIGN KEY ( Basket ) REFERENCES mittschema.tbl01 ( Basket );")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54700567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档