簡體   English   中英

將本地 tibble 添加到 Postgres 數據庫,其中一列是一個間隔

[英]Adding local tibble to Postgres database where a column is an interval

我正在嘗試向 Postgres 表添加一個條目,其中一列是一個間隔。 但是,我不確定如何將本地 tibble 的列類型轉換為間隔。 正如您想象的那樣,類型差異會導致數據庫不愉快。 有什么辦法可以解決這個問題?

library(dbplyr)
library(dplyr)

con <- my_db_con

df1 <- tibble(my_interval = "P3D")

df2 <- tbl(con, sql("select 'P3D'::interval as my_interval"))

# Will error:
rows_upsert(df2, df1, copy = TRUE)

結果錯誤:

Matching, by = "my_interval"
Error: Failed to prepare query: ERROR:  operator does not exist: text = interval
LINE 9:       WHERE ("LHS"."my_interval" = "RHS"."my_interval")
                                         ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.

感謝您的時間。

我(希望)在 dbplyr 的開發版本中修復了這個問題。 通過devtools::install_github("tidyverse/dbplyr")嘗試一下。 如果這不起作用,請告訴我。 您還有兩種其他可能性可以避免此問題:

  1. 顯式復制表並通過types參數傳遞列類型
copy_to(my_db_con, df1, types = c(my_interval = "interval"))
  1. 您可以顯式復制然后使用mutate()
df2_copied <- copy_to(my_db_con, df1) %>% mutate(my_interval = sql("my_interval::interval"))

rows_upsert(df1, df2_copied)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM