Postgresql slick映射postgres的一系列记录

Postgresql slick映射postgres的一系列记录,postgresql,orm,slick,Postgresql,Orm,Slick,有谁能帮我演示一下如何映射这两种类型: case class forumQuote( index: Int, startOffset: Int, endOffset: Int, isDirect: Boolean, quotedId: Int) case class forumQuotes(quotes: List[fo

有谁能帮我演示一下如何映射这两种类型:

case class forumQuote(
            index:          Int,
            startOffset:    Int,
            endOffset:      Int,
            isDirect:       Boolean,
            quotedId:       Int)
case class forumQuotes(quotes: List[forumQuote])
在博士后中代表为:

CREATE TYPE forum_quote AS
(
    index           INTEGER,
    q_start_offset  INTEGER,
    q_end_offset    INTEGER,
    is_direct       BOOLEAN,
    quoted_id       INTEGER
);
在中用作数组字段

CREATE TABLE forum_posts
(
...
quotes      forum_quote [],
...
)
在我自己的升降台中用作:

object ForumPosts extends Table[...] {
...
def quotes = Column[forumQuotes]("forum_quotes")
...
}

注意:我不希望看到JDBC数组的任何用途,因为我以后需要使用hstore(Key[String]=>Value[Array[T]]),其中T是postgresql记录。

FYI slick pg很快就会完全支持记录和数组


我改编了来自《花花公子》的postgres扩展插件的代码。下面显示了如何获取记录和记录数组的类型映射器

  object ForumQuoteMapper extends RecordMapper[ForumQuote] {
    val name = "forum_quote"
    val extractorRegex = "\\((\\d+),(\\d+),(\\d+),([t|f]),(\\d+)\\)".r
    def fnFromString = (lit: String) =>  {
      def toBool(str: String) = { str match { case "t" => true; case "f" => false}}

      lit match {
        case extractorRegex(index,startOffset,endOffset,bol,quotedId) =>
          ForumQuote(index.toInt,startOffset.toInt,endOffset.toInt,toBool(bol),quotedId.toInt)
      }}
    def fnToString = (v: ForumQuote)=>s"(${v.index}, ${v.startOffset}, ${v.endOffset}, ${v.isDirect},${v.quotedId})"
  }
  implicit val forumQuoteRecordMapper = ForumQuoteMapper.getRecordMapper
  implicit val forumQuoteArrayMapper = ForumQuoteMapper.getRecordArrayMapper

可以找到相应的代码。一旦我开始将它集成到我的代码中,我可能会发现并修复大量的bug:D,但它通过了基本测试用例。

这似乎是一个非常奇怪的数据设计-这是一个非常丰富的数据结构,可以存储在一列中。如果有一个带有外键的
论坛帖子
表(因为这是一个一对多关系),然后让你的ORM为你遍历它,不是更有意义吗?它太慢了。我有两个Gig的原始数据(20个左右,没有索引)。稍后我将构建自定义反向搜索索引,我主要学习如何实现这些目的。我不知道您正在使用的技术,但我想知道是否有其他方法可以解决实际的潜在问题,而不需要这种非标准/不寻常的功能:“NoSQL”文档存储?一种惰性加载方法,用于获取您检索到的帖子上的引号(我认为您从未以相反的方式加载,否则这种结构真的没有意义)?比ORM生成的索引更好地利用索引的自定义SQL?postgres完全能够完成这种“非标准”的工作。作为gist/gin索引结构的证明。数据透视是您获得nosql优势的方式。如果您永远不需要单独访问数据A中的数据B,并且它是一个1对多的关系,那么只需要对其进行透视。有问题的数据不需要在索引中。然而,对于我的工作来说,hstore/gin比传统索引性能更好。我正在移植现有的代码,在我开始使用hstore之前,我想尝试一些更简单的东西。否则的话,我会把它变成一种关系。