Następująca kwerenda zwraca miejsca w pobliżu nas (łac: 62,0, dł: 25,0), wewnątrz którego promień wpadamy w uporządkowane według odległości:Jak ponownie wykorzystać wynik dla klauzul SELECT, WHERE i ORDER BY?
SELECT *,
earth_distance(ll_to_earth(62.0, 25.0),
ll_to_earth(lat, lon)) AS distance
FROM venues
WHERE earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon)) <= radius
ORDER BY earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon))
Czy jest możliwe (i zalecane), aby ponownie wykorzystać wynik z earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon))
zamiast obliczać osobno dla klauzul SELECT, WHERE i ORDER BY?
Myślę, że jeśli funkcja jest oznaczona jako [immutable] (http://www.postgresql.org/docs/9.2/static/xfunc-volatility.html), wynik zostanie ponownie wykorzystany. Mam nadzieję, że ekspert Postgresu może mnie poprawić, jeśli się mylę. –
@MikeChristensen: Tak, tak to zwykle działa. Nawet 'STABLE' jest wystarczający, ponieważ deklaruje stałą wyniku w pojedynczej instrukcji.'IMMUTABLE' jest wymagane, aby potwierdzić stałe wyniki nawet * pomiędzy * transakcjami. Jest to potrzebne, aby funkcja była użyteczna na przykład w indeksie. –