我有两个工作语句,用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。在插入时,该值(即使null
或None
)被转换为某种与tsvector
不兼容的文本类型并引发异常。我找不到在没有额外库的情况下插入tsvector
的解决方案。如果您认为有,请发表评论,我应该更愿意遵循这条道路。
答案 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感知库有什么问题?