У меня проблема с обработкой даты и времени в RPostgreSQL. В частности, это относится к объектам POSIXct с часовым поясом UTC, который автоматически настраивается на переход на летнее время во время загрузки в базу данных postgres. Простой пример:
library(RPostgreSQL)
example = data.frame(date=as.POSIXct('2016-08-14 15:50:00',tz='UTC'))
con = dbConnect(dbDriver("PostgreSQL"),
dbname="mydb",
host="localhost",
port="5432",
user="me",
password="password")
dbWriteTable(con,name=c('myschema','mytable'),example,overwrite=T)
example2 = dbReadTable(con,name=c('myschema','mytable'))
dbDisconnect(con)
example2 # 2016-08-14 14:50:00
В этом случае время экспортируется как 15:50, но считывается обратно как 14:50, предполагая, что был применен переход на летнее время по британскому летнему времени. Я пытался настроить свои системные настройки на UTC, установить часовой пояс в R на UTC, используя Sys.setenv(TZ='UTC')
, и установить часовой пояс в Postgres на UTC, используя SET timezone TO 'UTC'
, все безрезультатно.
Кто-нибудь знает, где в процессе может происходить преобразование и откуда dbWriteTable берет свой часовой пояс? Есть ли какие-либо предложения по другим настройкам, которые могут потребовать корректировки?