Sugeriría no pensar demasiado en el problema y simplemente usar la primera fecha/hora del mes. Postgres tiene muchas funciones específicas de fechas, desde date_trunc()
a age()
a + interval
-- para admitir fechas.
Puede convertirlos fácilmente al formato que desee, obtener la diferencia entre dos valores, etc.
Si expresa su consulta como:
where year_month = date_trunc('month', now()) and user_id = 'adc1-23...'
Entonces puede aprovechar fácilmente un índice en (user_id, year_month)
o (year_month, user_id)
.