Есть ли особый способ обработки столбцов меток времени в R при извлечении данных с использованием RPostgreSQL?

Я пытаюсь получить данные из базы данных PostgreSQL, и результаты для поля отметки времени противоречивы. Я не уверен, правильно ли я обрабатываю результаты POSIXct. В противном случае, я думаю, я нашел ошибку в пакете RPostgreSQL. Вот способ повторить проблему:

Предположим, что в базе данных postgres есть таблица с одним полем (запустите ее в PostgreSQL):

CREATE DATABASE mydb;
CREATE TABLE test_table
(   
  "DateTime" timestamp without time zone NOT NULL,
  CONSTRAINT "pk_test_table" PRIMARY KEY ("DateTime")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test_table
  OWNER TO postgres;

И скажем, есть несколько сотен записей. Я буду заполнять их в R. Вот код:

library(RPostgreSQL)

# Let's feed the table with some sequence of date/time values
date_values <-  as.chron(seq(10000, 10500, 1/24))

format.chron <- function(z)  {
  sprintf("%04.0f-%02.0f-%02.0f %02.0f:%02.0f:00", 
            as.numeric(as.character(years(z))), 
            months(z), 
            as.numeric(as.character(days(z))), 
            as.numeric(as.character(hours(z))), 
            as.numeric(as.character(minutes(z))))
}

.generateInsertQuery <- function(date_values, field_name, table_name) {
  insert_val  <- paste(paste0("(", sQuote(format(date_values)), ")"), collapse=',')
  qry         <- paste("INSERT INTO", dQuote(table_name), paste0("(", dQuote(field_name), ")"), "VALUES", insert_val)
  qry
}

drv <- dbDriver('PostgreSQL')
con <- dbConnect(drv, user='postgres', dbname='mydb')
qry <- .generateInsertQuery(date_values, "DateTime", "test_table")
dbSendQuery(con, qry)

Если я пытаюсь получить значения, компонент времени удаляется из результирующих данных

res <- dbGetQuery(con, "SELECT * FROM test_table")
res[1:20,1]

Класс результата, однако, является POSIXct

class(res[,1])

Если результат выбирается по одной записи за раз, значения с часом: мин, равным 00:00, теряют компонент времени:

rs <- dbSendQuery(con, "SELECT \"DateTime\" FROM test_table")
res_list <- list()
for(i in 1:100) res_list[i]  <- fetch(rs,1)
res_list

В качестве обходного пути я извлекаю результаты по 1 записи за раз, исправляю и объединяю их в data.frame. Но это очень много времени, особенно для больших наборов данных. Есть идеи, почему это происходит и как бороться с этой проблемой?

Заранее спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос