Невозможно записать фрейм данных в R как оператор обновления для Postgis / PostgresSQL - PullRequest
0 голосов
/ 31 марта 2020

У меня есть следующий фрейм данных:

library(rpostgis)
library(RPostgreSQL)
library(glue)
df<-data.frame(elevation=c(450,900),
               id=c(1,2))

Теперь я пытаюсь загрузить это в таблицу в моей базе данных PostgreSQL / Postgis. Мое соединение (dbConnect) правильно работает для "SELECT" -Statements. Тем не менее, я попытался два способа обновления таблицы базы данных с этим кадром данных, и оба не удалось.

Первый:

 pgInsert(postgis,name="fields",data.obj=df,overwrite = FALSE, partial.match = TRUE,
         row.names = FALSE,upsert.using = TRUE,df.geom=NULL)

2 out of 2 columns of the data frame match database table columns and will be formatted for database insert.
Error: x must be character or SQL

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

Второй :

sql<-glue_sql("UPDATE fields SET elevation ={df$elevation} WHERE 
+               id = {df$id};", .con = postgis)
> sql
<SQL> UPDATE fields SET elevation =450 WHERE 
id = 1;
<SQL> UPDATE fields SET elevation =900 WHERE 
id = 2;
dbSendStatement(postgis,sql)
<PostgreSQLResult>

В обоих случаях данные не передаются в базу данных, и я не вижу никаких журналов ошибок в базе данных.

Есть ли какие-либо подсказки о том, как решить эту проблему?

1 Ответ

0 голосов
/ 07 апреля 2020

Это ошибка моего сайта, я ошибся glue_sql. Для корректного обновления базы данных при каждом запросе, созданном glue_sql, необходимо l oop через созданный объект, как показано в следующем примере:

for(i in 1:max(NROW(sql))){
   dbSendStatement(postgis,sql[i])
}
...