I'm trying to perform multiple queries on a single table using a UNION
rule
I have two tables:
- project (id, name, pinned BOOLEAN)
- skills (m2m to projects)
I'm looking to first get an array of rows which have pinned
set to true
and fill up the remaining with the latest entries (pinned
set to false
)
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
When performing this query , i get the below error
ERROR: could not identify an equality operator for type json[] LINE 7: array_agg(json_build_object('skill_id', project_skills.id,...
I don't understand this error. Is it failing because its trying to compare the json columns from both results?
I'm using Postgres 9.4.