簡體   English   中英

如何使用 Slick 將 json 對象插入 Postgres 中 jsonb 類型的列

[英]How to Insert a json object to a column of type jsonb in Postgres using Slick

我正在嘗試使用 Slick 將一個 json 對象插入到 Postgres 中類型為 jsonb 的列中。 這是我迄今為止嘗試過的..

 implicit val attributesJsonFormat = jsonFormat1(Attribute) implicit val attributesJsonMapper = MappedColumnType.base[Attribute, String]( { attribute => attribute.toJson.toString() }, { column => column.parseJson.convertTo[Attribute] } )

屬性案例類..
 case class Attribute(randomVal: Int)

在這里,我期待 Slick 在讀取和寫入之間進行隱式轉換。 但相反,我收到以下錯誤..
列 \\"attributes\\" 是 jsonb 類型,但表達式的類型是不同的字符\\n 提示:您需要重寫或強制轉換表達式

我認為發生此錯誤是因為 Slick 嘗試將對象另存為 varchar。

然后我創建了一個觸發器,它將在插入或更新之前調用一個函數。 此函數的作用是在保存到數據庫之前將相關對象轉換為 jsonb。

 CREATE OR REPLACE FUNCTION parse_attributes_to_json_in_accounts() RETURNS TRIGGER AS $$ BEGIN NEW.attributes = to_jsonb(NEW.attributes); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER tr_parse_attributes_to_json BEFORE INSERT OR UPDATE ON accounts FOR EACH ROW EXECUTE PROCEDURE parse_attributes_to_json_in_accounts(); ALTER FUNCTION parse_attributes_to_json_in_accounts() OWNER TO app;

即使在此解決方案之后,我仍然收到相同的錯誤消息。 我猜 Slick 甚至在達到這一點之前就拋出了異常? 任何想法讓這個工作?

有一個庫為許多不同的 PostgreSQL 類型添加了 Slick 支持: https : //github.com/tminglei/slick-pg

對於遇到類似問題的任何人,您都可以使用帶有 jsonb 轉換的本機 sql。

sqlu"INSERT INTO accounts VALUES (${account.id}, (to_jsonb($jsonAttribute) #>> '{}')::jsonb)"

執行上述查詢將向屬性列插入一個帶有 jsonb 對象的新記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM