我刚刚读过hstore扩展名is deprecated and might be removed in future versions的=>
运算符。这是个坏消息,因为我在R中有几个函数
当存储到包含hstore字段的Postgres表时,依赖于使用此运算符。
在写入数据库之前,我在内存中准备了data.frame
或data.table
(R Session)。
随后我只使用方便的函数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(文本,文本)。
答案 0 :(得分:3)
仅删除运算符,而不删除基础功能。而不是
a => b
写
hstore(a, b)
这完全向后兼容。所以今天就改变你的代码并完成。
答案 1 :(得分:2)
它实际上并不特定于hstore:它也会影响其他自定义运算符。其removal in 9.2的推理是the SQL standard now reserves that token。
处理此类公告的好策略是什么?
考虑切换到使用json。它有一个类似的->
运算符,一组类似的函数,我想你有R库允许从一个对象转到json并返回。在数据库级别,更改仅涉及cast from hstore to json(请参阅json docs页面上的最后一个注释)。