我剛剛閱讀了=>
運營商的hstore擴展is deprecated and might be removed in future versions。這是壞消息,因爲我有幾個函數在 依賴使用此運算符時存儲到包含hstore字段的Postgres表中。Postgres:如何處理已棄用的hstore運營商:「=>」
在寫入數據庫之前,我在內存中準備了一個data.frame
或data.table
(R會話)。 隨後,我只需使用便捷功能dbWriteTable
將整個表內存寫入數據庫。因此,使用postgres函數hstore(文本,文本)會很不方便。
什麼是處理這種公告的好策略?我很驚訝他們正在移除運營商,因爲肯定有相當一部分人正在與其他類型的字段一起寫入hstore。這也不是真正的R特定。它是許多語言相同的問題..
雖然我走到這一步,一些有用的見解,也許這有助於澄清我的問題是什麼:
我添加了一個重複的例子,用於R鄉親和截圖爲世界其他.. 我建立R中一個data.frame(基本上在存儲器中的表表示)是這樣的:
mydf <- structure(list(ts_key = c("somekey",
"somekey"), ts_language = c("de", "en"
), ts_labels = c("\"Kurztitel\" => \"Wohlbefinden\",\"mögliche_Antworten\" => \"fantastisch,so lala,total fertig\",\"Wortlaut\" => \"Wie geht es?\"",
"\"available_items\" => \"awesome,somewhat ok,wasted\",\"short_title\" => \"well being\",\"wording\" => \"How are you?\""
)), .Names = c("ts_key", "ts_language", "ts_labels"), row.names = c(NA,
-2L), class = "data.frame")
所以存儲器表/ data.frame含有hstore
作爲字符作爲其中一列。 這是非常方便,因爲我可以有很多行的data.frame,然後簡單地使用:
dbWriteTable(myconnection,"somePostgresTableWithTheRightStructure",mydf,append=T)
,只是寫了整個data.frame的分貝,而無需構建查詢或顯式循環。我很想保留這個,但我不知道如何告訴dbWriteTable
使用hstore(文本,文本)。
你能寫一個'=>'的包裝器,並將它作爲權宜之計包含在你的包中,直到你可以遷移你的代碼? –
目前,一切正常。我有這個功能:https://github.com/mbannert/pgsqltsmap/blob/master/R/create_hstore.R 創建一個字符表示,所以我可以有一個數據。包含(其他)hstore列的框架。你是這個意思嗎?我只是不想離開使用dbWriteTable並且不得不創建大量的單個INSERT。 –
我的意思是基本上將'=>'函數導入到你的包中,但是從@Denis的評論看來,它會導致SQL出現問題。 –