2015-11-10 3 views
4

Я хочу экспортировать полный DataFrame в таблицу, которая уже создана в базе данных (postgresql) и содержит аналогичные данные.RPostgreSQL - импортировать данные в таблицу

Я нашел несколько вопросов, объясняющих таблицу dbwrite (.... overwrite = TRUE), я не хочу переписывать данные, которые уже присутствуют в моей таблице. Я просто хочу обновить таблицу таблицей данных из консоли r.

может кто-то дайте мне знать, как я могу это сделать ..

что-то вроде этого

dbInsertTable(con, df, tablename = "MyTable") 

ответ

5

Вам нужно dbWriteTable

Предполагая, что вы не используете имена строк в ваших данных рама вы бы сделали

dbWriteTable(con, "MyTable", df, row.names=FALSE, append=TRUE) 

если вы хотите, чтобы ваши имена строк fr om df будет столбцом в вашей таблице базы данных, тогда вы установите этот параметр на TRUE. Если ваша таблица находится в схеме, отличной от общедоступной схемы, тогда вы должны сделать c('myschema', 'MyTable') вместо интуитивной «myschema.MyTable». Кроме того, столбцы вашего фрейма должны быть в том же порядке, что и столбцы в таблице базы данных. Он соответствует по порядку, а не по имени.

Как и в стороне, вы, вероятно, не должны использовать заглавные буквы в своих именах столбцов или столбцов postgres, потому что тогда вам нужно их процитировать. Если вы действительно используете заглавные буквы, вам понадобится что-то вроде dbWriteTable(con, '"MyTable"', df, row.names=FALSE, append=TRUE)

+0

@ Дин Мак Грегор: Большое вам спасибо. он работал очень хорошо. ваше однострочное решение сэкономило много времени и усилий. спасибо – Chanti

+0

Мак Грегор: Еще раз спасибо за вышеупомянутое решение. У меня есть небольшой вопрос. В ** «mytable» ** у меня 4 столбца, и для одного столбца я использую уникальное ограничение ключа. при обновлении таблицы из консоли r с помощью вышеупомянутого решения, которое вы предложили, я столкнулся с небольшой ошибкой, и я знаю причину этого (уникальное ограничение ключа). – Chanti

+0

например, у меня есть номер элемента 12345 в столбце ** un_number ** в моем кадре данных. тот же столбец ** un_number ** в ** mytable ** уже содержит unitnumber 12345. Так что мой вопрос заключается в том, что если у меня есть дубликат unitnumber в dataframe вместе с другими исходными номерами - можно ли остановить только этот номер вместо stoppping полный блок данных от обновления из-за уникальной константы. – Chanti

Смежные вопросы