简体   繁体   English

MonetDB不接受来自dbWriteTable的BOOLEAN(csvdump = T)

[英]MonetDB does not accept BOOLEANs from dbWriteTable (csvdump = T)

I get the following when appending boolean data to an existing table. 将布尔数据附加到现有表时,得到以下信息。

> dbWriteTable(conn, "myTable", myData, overwrite = F, append = T, csvdump = T) > dbWriteTable(conn,“ myTable”,myData,覆盖= F,附加= T,csvdump = T)

Error in .local(conn, statement, ...) : Unable to execute statement 'COPY 1292 RECORDS INTO myTable FROM 'C:\\Path\\to\\AppData\\Local\\Temp\\Rtmp80mc5L\\file3e24401f42a.cs...'. .local(conn,statement,...)中的错误:无法从“ C:\\ Path \\ to \\ AppData \\ Local \\ Temp \\ Rtmp80mc5L \\ file3e24401f42a.cs ...”执行语句“将1292记录记录到myTable中”。

Server says '!value 'TRUE' from line 1 field 20 not inserted, expecting type boolean'. 服务器在未插入第1行第20行的字段中说'!value'TRUE',期望类型为boolean'。

I've taken some code of the connector which deals with this: 我已经处理了与此连接器有关的一些代码:

> tmp <- tempfile(fileext = ".csv") > tmp <-tempfile(fileext =“ .csv”)

> write.table(myData, tmp, sep = ",", quote = TRUE,row.names = FALSE, col.names = FALSE,na="") > write.table(myData,tmp,sep =“,”,quote = TRUE,row.names = FALSE,col.names = FALSE,na =“”)

> tmp > tmp

[1] "C:\\Path\\to\\AppData\\Local\\Temp\\Rtmp80mc5L\\file3e24401f42a.csv" [1]“ C:\\ Path \\ to \\ AppData \\ Local \\ Temp \\ Rtmp80mc5L \\ file3e24401f42a.csv”

When changing TRUE to 1 and FALSE to 0 and run the following SQL code: 当将TRUE更改为1并将FALSE更改为0并运行以下SQL代码时:

COPY 1292 RECORDS INTO myTable FROM 'C:\\Path\\to\\AppData\\Local\\Temp\\Rtmp80mc5L\\file3e24401f42a.csv' USING DELIMITERS ',','\\n','"' NULL AS '' LOCKED; COPY 1292将记录从'C:\\ Path \\ to \\ AppData \\ Local \\ Temp \\ Rtmp80mc5L \\ file3e24401f42a.csv'使用DELIMITER',','\\ n','“'NULL AS''LOCKED;

then all data is inserted. 然后插入所有数据。

There seems to be some need for conversion of boolean columns. 似乎需要转换布尔列。 In the meantime, does it work with csvdump=F? 同时,它是否可以与csvdump = F一起使用?

CREATE TABLE TABLE1 ( 创建表TABLE1(

INFO VARCHAR(5), INFO VARCHAR(5),

SECURE BOOLEAN 安全布尔

); );

CREATE TABLE TABLE2 ( 创建表TABLE2(

INFO VARCHAR(5), INFO VARCHAR(5),

SECURE BOOLEAN 安全布尔

); );

insert into TABLE1 (INFO, SECURE) values ('FALSE',FALSE); 插入到TABLE1(INFO,SECURE)值('FALSE',FALSE)中;

insert into TABLE1 (INFO, SECURE) values ('TRUE',TRUE); 插入TABLE1(INFO,SECURE)值('TRUE',TRUE);

> library(MonetDB.R) >库(MonetDB.R)

> conn <- dbConnect(MonetDB.R(), "monetdb://localhost/demo") > conn <-dbConnect(MonetDB.R(),“ monetdb:// localhost / demo”)

> myData <- dbGetQuery(conn,"select * from table1") > myData <-dbGetQuery(conn,“从表1选择*”)

> dput(myData) > dput(myData)

structure(list(info = c("FALSE", "TRUE"), secure = c(FALSE, TRUE )), .Names = c("info", "secure"), row.names = c(NA, 2L), class = "data.frame") 结构(list(info = c(“ FALSE”,“ TRUE”),secure = c(FALSE,TRUE)),.Names = c(“ info”,“ secure”),row.names = c(NA,2L ),类=“ data.frame”)

> dbWriteTable(conn, "table2", myData, overwrite = F, append = T, csvdump = F) > dbWriteTable(conn,“ table2”,myData,覆盖= F,附加= T,csvdump = F)

[1] TRUE [1]是

> dbWriteTable(conn, "table2", myData, overwrite = F, append = T, csvdump = T) > dbWriteTable(conn,“ table2”,myData,覆盖= F,附加= T,csvdump = T)

Error in .local(conn, statement, ...) : Unable to execute statement 'COPY 2 RECORDS INTO table2 FROM 'C:\\Path\\to\\AppData\\Local\\Temp\\Rtmp80mc5L\\file3e241533d14.csv' US...'. .local(conn,statement,...)中的错误:无法从'C:\\ Path \\ to \\ AppData \\ Local \\ Temp \\ Rtmp80mc5L \\ file3e241533d14.csv'US ...'执行语句'COPY 2 RECORDS INTO table2 。

Server says '!value 'FALSE' from line 3 field 2 not inserted, expecting type boolean'. 服务器说未插入第3行第2行的'!value'FALSE',期望类型为boolean'。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM