我正在嘗試將一組 JSON 值插入到 postgres 資料庫中。但我收到此錯誤:
error: malformed array literal: "{{"traits":{"belief":[],"personality":[],"physical":[]},"relationships":[]},{"traits":{"belief":[],"personality":[],"physical":[]},"relationships":[]}}"
如果我是對的,陣列文字應該采用"{{...},{...}}". 據我所知,這是將 JSON 元素陣列插入 postgres 表的正確方法。
如果有幫助,這是我的整個查詢:
INSERT INTO main(prev_snippets, next_snippets, req_characters, description, requirements, prereq_events, character_effects, world_effects, character_decisions)
VALUES ('{"22","45","99"}', '{"33","22"}', '{{"traits":{"belief":[],"personality":[],"physical":[]},"relationships":[]},{"traits":{"belief":[],"personality":[],"physical":[]},"relationships":[]}}', 'cvdfgfg', NULL, NULL, NULL, NULL, NULL);
prev_snippets和next_snippets是整數陣列(當我弄清楚 JSON 問題時,我將使用這些整數而不是字串),req_characters是 JSONB 陣列,并且description是文本。
請讓我知道如何使我的問題更好。非常感謝您的幫助。
更新:
這是表定義:
CREATE TABLE main (
id SERIAL NOT NULL UNIQUE,
PRIMARY KEY(id),
prev_snippets INTEGER[],
next_snippets INTEGER[],
req_characters JSONB[],
description TEXT NOT NULL,
requirements JSONB[],
prereq_events JSONB[],
character_effects JSONB[],
world_effects JSONB[],
character_decisions JSONB[]
);
我相信我使用的是 postgres 14 版。
uj5u.com熱心網友回復:
使用 Postgres 執行此操作的最簡單方法可能array是:
insert into array_test
(jsonb_array)
values
(ARRAY['{"traits":{"belief":[],"personality":[],"physical":[]},"relationships":[]}'::jsonb,
'{"traits":{"belief":[],"personality":[],"physical":[]},"relationships":[]}'::jsonb]);
select jsonb_array[1] from array_test ;
jsonb_array
------------------------------------------------------------------------------------
{"traits": {"belief": [], "physical": [], "personality": []}, "relationships": []}
雖然如果它在那里我我只想用一個jsonb欄位不是一個Postgresarray的jsonb元素。
uj5u.com熱心網友回復:
您已將 JSONB 與 Postgres 陣列混為一談。
req_characters JSONB[]是 JSONB 值的 Postgres 陣列。這將是類似...
array['{"traits":...}','{"traits":...}'].
在 Postgres 陣列中嵌入 JSON 是不必要的復雜。JSON 已經有陣列。在 JSON 中,{}是一個鍵/值物件。[]是一個元素陣列。
而不是jsonb[]簡單地使用jsonb并傳遞一個 JSON 陣列。
'[{"traits":...}, {"traits":...}]'.
大多數語言都有將資料轉換為 JSON 的內置工具。這比在 Postgres 陣列中嵌入 JSON 簡單得多。有關更多資訊,請參閱JSON.org。
出于同樣的原因,我建議將所有其他陣列更改為 JSONB。
另請注意,陣列和 JSON 不能替代連接表。您的所有陣列都可以作為連接表更好地完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/313922.html
標籤:数组 PostgreSQL
上一篇:從表中查詢在PostgreSQL的其中一列中包含某個鍵/值的記錄
下一篇:匹配具有多個條件的行陣列
