While doing UPSERT in Postgres 9.5, is it possible to return null on INSERT success and return something ON CONFLICT?
I would like to something like this:
You could use CTE:
WITH cte AS (
INSERT INTO "user"(timestamp, user_id, member_id)
values ($1, $2, $3)
ON CONFLICT (user_id, member_id) DO NOTHING
RETURNING user_id
)
SELECT NULL AS result
WHERE EXISTS (SELECT 1 FROM cte) -- success
UNION ALL
SELECT id
FROM "user"
WHERE user_id = $2
AND NOT EXISTS (SELECT 1 FROM cte); -- conflict
DBFiddle Demo