を使用しているとき、私はUNION
ルールにUNION
を使用して、単一のテーブルの上に複数のクエリを実行しようとしています[]型のJSONの等価演算子をcouldntのを識別私は2つのテーブルがあります。
- プロジェクト(IDを、名前、固定BOOLEAN)
- スキル(プロジェクトにM2M)
私が最初にpinned
セットを持つ行の配列を取得していますよこのクエリを実行する場合、私は以下のエラー
ERROR: could not identify an equality operator for type json[] LINE 7: array_agg(json_build_object('skill_id', project_skills.id,...
を取得し、私はこのことを理解していない
SELECT
project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.pinned = true
GROUP BY project_id,project_name
UNION
SELECT
project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.id != 1 AND project.pinned = false
GROUP BY project_id,project_name
ORDER BY project.create_date DESC LIMIT 5
を(false
からpinned
セット)最新のエントリで残りを埋めますエラー。両方の結果からjson列を比較しようとしているので失敗していますか?
私はPostgres 9.4を使用しています。
@Kunkka: 'UNION'が*必要な場合、* 1つの方法は' jsonb'にキャストする(または配列を 'jsonb []'にキャストする)ことです。等価演算子が定義されます。参照:http://stackoverflow.com/a/24296054/939860またはhttp://stackoverflow.com/a/30520760/939860。 (元の形式は失われていますが、これは通常は無関係です) –
同じ問題がありました。私はグループ内で ':text'を使用してテキストに値をキャストしました。ビューの階層構造をさらにレベルアップしましたので、 ':: json []'で必要なときにjsonにキャストし直しました。 Pg 9.6の使用。 –