我试图在duckdb(R API)中将Not Null约束更改为Null约束,但无法使其保持不变。下面是一个问题的例子。
drv<- duckdb()
con<- dbConnect(drv)
dbExecute(con, "CREATE TABLE db(a varchar(1) NOT NULL, b varchar(1) NOT NULL)")
d<- data.table(a = 1:3, b=c("a", NA, "b"))
#test 'not null' constraint
dbWriteTable(con, name = "db", value = d, append = T)
Error: Constraint Error: NOT NULL constraint failed: db.b
所以在这里我尝试修改'db'以允许我在列b中写入'd'及其NA值
> dbSendQuery(con, "ALTER TABLE db ALTER COLUMN b SET DEFAULT NULL")
<duckdb_result 46970 connection=b6ff0 statement='ALTER TABLE db ALTER COLUMN b SET DEFAULT NULL'>
> dbWriteTable(con, name = "db", value = d, append = T)
Error: Constraint Error: NOT NULL constraint failed: db.b
看起来“dbSendQuery”改变表工作了(至少没有错误),但很明显约束没有改变。有什么想法可以让约束的改变保持不变吗?
1条答案
按热度按时间oaxa6hgo1#
使用
DROP NOT NULL
代替SET NOT NULL
。固定: