Devuelve filas de INSERT con ON CONFLICT sin necesidad de actualizar

Tengo una situación en la que con frecuencia necesito obtener una fila de una tabla con una restricción única, y si no existe ninguna, entonces créela y regrese. Por ejemplo, mi tabla podría ser:

CREATE TABLE names(
    id SERIAL PRIMARY KEY,
    name TEXT,
    CONSTRAINT names_name_key UNIQUE (name)
);

Y contiene:

id | name
 1 | bob 
 2 | alice

Entonces me gustaría:

 INSERT INTO names(name) VALUES ('bob')
 ON CONFLICT DO NOTHING RETURNING id;

O quizás:

 INSERT INTO names(name) VALUES ('bob')
 ON CONFLICT (name) DO NOTHING RETURNING id

y que devuelva la identificación de Bob1. Sin embargo,RETURNING solo devuelve filas insertadas o actualizadas. Entonces, en el ejemplo anterior, no devolvería nada. Para que funcione como se desea, en realidad necesitaría:

INSERT INTO names(name) VALUES ('bob') 
ON CONFLICT ON CONSTRAINT names_name_key DO UPDATE
SET name = 'bob'
RETURNING id;

lo que parece un poco engorroso. Supongo que mis preguntas son:

¿Cuál es el razonamiento para no permitir el (mi) comportamiento deseado?

¿Hay alguna forma más elegante de hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta