我正在嘗試使用 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] }
)
屬性案例類.. 在這里,我期待 Slick 在讀取和寫入之間進行隱式轉換。但相反,我收到以下錯誤..
case class Attribute(randomVal: Int)
列 \"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 甚至在達到這一點之前就拋出了例外?任何想法讓這個作業?
uj5u.com熱心網友回復:
有一個庫為許多不同的 PostgreSQL 型別添加了 Slick 支持:https : //github.com/tminglei/slick-pg
uj5u.com熱心網友回復:
對于遇到類似問題的任何人,您都可以使用帶有 jsonb 轉換的本機 sql。
sqlu"INSERT INTO accounts VALUES (${account.id}, (to_jsonb($jsonAttribute) #>> '{}')::jsonb)"
執行上述查詢將向屬性列插入一個帶有 jsonb 物件的新記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358578.html
標籤:PostgreSQL的 斯卡拉 光滑的 jsonb
