2016-10-24 4 views
2

RPostgresパッケージを使用してPostgresデータベースにR tibbleオブジェクト(またはdata.frame)を書き込もうとしています。ドキュメントに続いて、dbWriteTable関数を使用しようとしています。はRPGを使用してPostgresSQLにタイムスタンプを書き込めませんdbWriteTable

ただし、このメソッドにはfield.typesの指定がないことがわかりました。ここでは、入力がPOSIXctのタイムスタンプ(タイムスタンプが文字として解釈されるときに渡る)があるときにメソッドが失敗するのを見ることができる最小の例を示します。

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 

誰もがRを使用してPostgresのタイムスタンプを持つテーブルを書くためのより良い方法を知っていますか?

答えて

0

PostgreSQLのドライバを使用して、RPostgreSQLパッケージが動作します。また、3番目のタイムスタンプの形式がas.POSIXctのデフォルト値と一致しません - 1時間分の数字が多すぎます。だから"2016-07-12 010:43""2016-07-12 10:43"に変更したところ、問題なく動作するはずです。

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] TRUE

dbWriteTable(conn = conn, name = "words2", value = test2) 

[1] TRUE

dbDisconnect(conn) 
+0

こんにちは、あなたのコメントクリスいただきありがとうございます。残念ながら問題を解決していない元の例では、タイプミスを修正しました。 – spsaaibi

+0

PostgreSQLドライバをRPostgreSQLパッケージに入れてみてください。あなたの例は私のためにうまく動作します。私はそれが役に立ちそうなら私の投稿を編集することができます。 –

+0

これは私に 'RPostgreSQL'を再訪させました。このRPostgreSQLは、いくつかのSSL接続の問題を解決しました(この記事でも説明されていません)。クリスおかげで! – spsaaibi

関連する問題