首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在PostgreSQL中使用RPostgres dbWriteTable编写时间戳

无法在PostgreSQL中使用RPostgres dbWriteTable编写时间戳
EN

Stack Overflow用户
提问于 2016-10-24 10:16:51
回答 1查看 369关注 0票数 2

我试图使用tibble包将Rdata.frame对象(或data.frame)写入Postgres数据库。在文档之后,我尝试使用dbWriteTable函数。

但是,我意识到该方法中没有field.types的规范。在这里,我提供了一个最小的示例,当输入具有POSIXct时间戳时(以及当时间戳被解释为字符时传递),您可以看到方法失败。

代码语言:javascript
复制
library(dplyr)
library(DBI)
library(RPostgres)
library(tibble)

conn <- dbConnect(RPostgres::Postgres(),
  host = url$host,
  port = url$port,
  dbname = url$dbname,
  user = url$user,
  password = url$password
)

test <- tibble(
  words = c("hallo","ja", "nein"),
  value = c(3,4,5),
  time= as.POSIXct(c("2016-05-04 04:32","2016-06-02 09:37","2016-07-12 10:43")))
test2 <- tibble(
  words = c("hallo","ja", "nein"),
  value = c(3,4,5),
  time= c("2016-05-04 04:32","2016-06-02 09:37","2016-07-12 10:43"))

dbWriteTable(conn = conn, name = "words", value = test)
> Error in eval(substitute(expr), envir, enclos) :
> ERROR:  invalid input syntax for type real: "2016-05-04 04:32:00"
> CONTEXT:  COPY words, line 1, column time: "2016-05-04 04:32:00"

dbWriteTable(conn = conn, name = "words2", value = test2)
> [1] TRUE

有谁知道用Postgres使用R编写带有时间戳的表的更好方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 13:00:57

PostgreSQL包中使用RPostgreSQL驱动程序是可行的。另外,第三个时间戳的格式与as.POSIXct的默认格式不匹配--小时的数字太多。因此,我将"2016-07-12 010:43"改为"2016-07-12 10:43",您应该会发现它运行良好。

代码语言:javascript
复制
library(dplyr)
library(DBI)
library(RPostgreSQL)
library(tibble)

#connect to db    
url <- list(user="postgres",password="postgres",dbname="test")

conn <- dbConnect(drv="PostgreSQL", user=url$user, password=url$password, dbname = url$dbname)


test <- tibble(
  words = c("hallo","ja", "nein"),
  value = c(3,4,5),
  time= as.POSIXct(c("2016-05-04 04:32","2016-06-02 09:37","2016-07-12 10:43")))
test2 <- tibble(
  words = c("hallo","ja", "nein"),
  value = c(3,4,5),
  time= c("2016-05-04 04:32","2016-06-02 09:37","2016-07-12 010:43"))


dbWriteTable(conn = conn, name = "words", value = test)

1真

代码语言:javascript
复制
dbWriteTable(conn = conn, name = "words2", value = test2)

1真

代码语言:javascript
复制
dbDisconnect(conn)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40215900

复制
相关文章

相似问题

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