私はpostgresバックエンドから使用するオブジェクトを構築しようとしています。問題のテーブルは次のようになります。非JSONBポストグルテーブルからネストされた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)
)
私はこのようになりますJSONなどの単一の事のためだけField_Values、ロードしようとしていた場合、これは単純なことになります。
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)は存在しません。このようなやり方は、豊富なテキストの変換とそのようなナンセンスを伴わないものですか?または、クエリでデータを並べ替える代わりに、代わりに自分のコードでデータを並べ替える必要があります。