结合非*投影和"返回"在Slick中

时间:2017-12-03 20:39:40

标签: postgresql scala slick

我有两个工作语句,用Slick将一行插入名为document的表中。

第一个插入所有列,取自row对象并返回Postgres生成的ID:

(Tables.Document returning Tables.Document.map(_.id)) +=
    DocumentRow(id=-1, name="Name", fulltext="The text")

第二个忽略名为fulltext的列,仅插入name但不返回生成的ID:

Tables.Document.map(r => (r.name)) += ("Name")

如何将两者结合起来(将插入限制为列的子集同时返回生成的ID)?

背景:

我想从插入中排除fulltext列的原因是它是Postgres类型tsvector,但生成的Slick代码将其视为String。在插入时,该值(即使nullNone)被转换为某种与tsvector不兼容的文本类型并引发异常。我找不到在没有额外库的情况下插入tsvector的解决方案。如果您认为有,请发表评论,我应该更愿意遵循这条道路。

1 个答案:

答案 0 :(得分:1)

虽然我认为正确的方法是修复tsvector问题,但我没有足够的Postres经验来帮助您解决问题。至于你的解决方法,你可以这样做,代码应该是这样的:

(Tables.Document.map(r => (r.name)) returning Tables.Document.map(_.id)) += ("Name")

如果您将其拆分为多个部分,您可以看到,首先您在第二个示例中创建Query,然后立即将+=应用于returning,然后首先使用+=将其链接然后才打电话给<form action="admin2.php" method="POST"> <input type="password" name="password" /> ...... <input type="submit" name="edit" value="Edit" /> </form>

P.S。使用一些额外的Postres感知库有什么问题?