第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 pgx 使用 JSONBArray 時出現(xiàn)“錯誤的元素類型”

使用 pgx 使用 JSONBArray 時出現(xiàn)“錯誤的元素類型”

Go
動漫人物 2022-06-27 15:30:14
我正在嘗試插入一個具有inventorywith 數(shù)據(jù)類型的新行jsonb[]:elements := []pgtype.Text{{String: `{"adsda": "asdasd"}`, Status: pgtype.Present}}dimensions := []pgtype.ArrayDimension{{Length: 1, LowerBound: 1}}inventory := pgtype.JSONBArray{Elements: elements, Dimensions: dimensions, Status: pgtype.Present}row = db.pool.QueryRow(context.Background(), `INSERT INTO user ("email", "password", "inventory") VALUES($1, $2, $3) RETURNING uuid, email, "password"`, requestEmail, requestPassword, inventory)但我收到以下錯誤:"Severity": "ERROR","Code": "42804","Message": "wrong element type","Detail": "","Hint": "","Position": 0,"InternalPosition": 0,"InternalQuery": "","Where": "","SchemaName": "","TableName": "","ColumnName": "","DataTypeName": "","ConstraintName": "","File": "arrayfuncs.c","Line": 1316,"Routine": "array_recv"Postgres 表定義:CREATE TABLE public.user (    uuid uuid NOT NULL DEFAULT uuid_generate_v4(),    email varchar(64) NOT NULL,    "password" varchar(32) NOT NULL,    inventory _jsonb NULL,    CONSTRAINT user_pk PRIMARY KEY (uuid));可能是什么問題?任何想法都會有所幫助。
查看完整描述

1 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗 獲得超4個贊

輸入jsonb[]pgx 被破壞

至于你報告的錯誤信息:


"Severity": "ERROR",

"Code": "42804",

"Message": "wrong element type",

...

pgx 上的Guthub 頁面顯示:


二進(jìn)制格式可以更快,這是 pgx 接口使用的。


所以你使用的是二進(jìn)制協(xié)議。為此,數(shù)據(jù)類型必須使用兼容的二進(jìn)制格式,并且似乎ARRAY of jsonb沒有正確編碼?有關(guān)的:


PostgreSQL/PostGIS - PQexecParams - 錯誤的元素類型

幸運(yùn)的是,作者似乎昨天才解決了這個問題:(!)


jackc:修復(fù) JSONBArray 以包含 JSONB 的元素


安裝包含提交 79b05217d14ece98b13c69ba3358b47248ab4bbc 的最新版本后,您的問題應(yīng)該會消失


jsonb[]與jsonb嵌套 JSON 數(shù)組相比

使用 plainjsonb而不是jsonb[]. JSON 可以自己嵌套數(shù)組??紤]:


SELECT '[{"id": 1}

       , {"txt": "something"}]'::jsonb  AS jsonb_array

     , '{"{\"id\": 1}"

        ,"{\"txt\": \"something\"}"}'::jsonb[] AS pg_array_of_jsonb;

兩者都可以在 Postgres 中取消嵌套:


SELECT jsonb_array_elements('[{"id": 1}, {"txt": "something"}]'::jsonb) AS jsonb_element_from_json_array;


SELECT unnest('{"{\"id\": 1}","{\"txt\": \"something\"}"}'::jsonb[]) AS jsonb_element_from_pg_array;

結(jié)果相同。


db<>在這里擺弄


這也應(yīng)該避免你的錯誤。


附加錯誤

你的INSERT命令:


INSERT INTO user ("email", "password", "inventory") VALUES ...

...真的應(yīng)該提出這個:


錯誤:“用戶”處或附近的語法錯誤


因為user是保留字。您必須雙引號才能使其正常工作。但不要將user其用作 Postgres 標(biāo)識符。曾經(jīng)。


表創(chuàng)建工作,因為那里的表名是模式限定的,這使得它明確:


CREATE TABLE public.user ( ...


查看完整回答
反對 回復(fù) 2022-06-27
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號