我想從我的postgres後端構建一個使用對象。有問題的表格看起來像這樣:如何從非JSONB postgres表加載數據作爲嵌套的JSONB
我們有一些東西基本上充當矩陣的行,其中的列是Field_Columns。 Field_Values是填充的單元格。
Create Table Platform_User (
serial id PRIMARY KEY
)
Create Table Things (
serial id PRIMARY KEY,
INTEGER user_id REFERENCES Platform_User(id)
)
Create Table Field_Columns (
serial id PRIMARY KEY,
TEXT name,
)
Create Table Field_Values (
INTEGER field_column_id REFERENCES Field_Columns(id),
INTEGER thing_id REFERENCES Things(id)
TEXT content,
PRIMARY_KEY(field_column_id, thing_id)
)
這將是簡單的,如果我試圖加載只是Field_Values爲一個單一的東西爲JSON,這將是這樣的:
SELECT JSONB_OBJECT(
ARRAY(
SELECT name
FROM Field_Columns
ORDER BY Field_Columns.id
),
ARRAY(
SELECT Field_Values.content
FROM Fields_Columns
LEFT JOIN Field_Values ON Field_Values.field_column_id = Field_Columns.id
AND Field_Values.thing_id = Things.id
ORDER BY Field_Columns.id)
)
)
FROM Things
WHERE Thing.id = $1
然而
,我想構建JSON對象在返回時看起來像這樣。我想獲得的所有字段的對象:對的事情,用戶擁有
{
14:
{
'first field':'asdf',
'other field':''
}
25:
{
'first field':'qwer',
'other field':'dfgdsfg'
}
43:
{
'first field':'',
'other field':''
}
}
我的努力來構建該查詢這個樣子的Field_Values的對象,但我遇到了這個問題,其中JSONB目標函數不希望構造一個對象,其中字段的值是一個對象本身
SELECT (
JSONB_OBJECT(
ARRAY(SELECT Things.id::TEXT
FROM Things
WHERE Things.user_id = $2
ORDER BY Things.id
),
ARRAY(SELECT JSONB_OBJECT(
ARRAY(
SELECT name
FROM Field_Columns
ORDER BY Field_Columns.id),
ARRAY(
SELECT Field_Values.content
FROM Field_Columns
LEFT JOIN Field_Values ON Field_Values.field_column_Id = Field_Columns.id
AND Field_Values.thing_id = Things.id
ORDER BY Field_Columns.id)
)
FROM Things
WHERE Things.user_id = $2
ORDER BY Things.id
)
)
) AS thing_fields
特定的錯誤我得到的是功能jsonb_object(文本[],jsonb [])不存在。有沒有辦法做到這一點,不涉及大量的文字轉換和廢話呢?或者我只需要放棄嘗試在查詢中對數據進行排序,而不是在我的代碼中執行。