"ユーザー"と呼ばれるテーブル内の行が更新された後に起動するトリガーを作成しています。ユーザーの "lat"と "lng"列が別の緯度から指定された距離内にある場合はpg_notify
にします。& lng値。私はすでにこのようになり、所与の緯度と経度の値の特定の距離内のすべてのユーザーを選択するWHERE句を使用してSQLクエリを作成した:句のみ緯度を持っており、ユーザが選択PostgreSQLストアドプロシージャのIF句でWHERE句を実行できますか?
SELECT *
FROM users
WHERE earth_box(ll_to_earth($1,$2), $3) @> ll_to_earth(lat, lng);
ザ緯度経度の$3
メートル以内の経度($1, $2)
。
CREATE OR REPLACE FUNCTION notify_on_user_location_update(channel text, specified_lat numeric, specific_lng numeric) RETURNS trigger AS $$
DECLARE
changed_lat numeric;
changed_lng numeric;
specified_radius numeric := 5000;
BEGIN
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
changed_lat = NEW.lat;
changed_lng = NEW.lng;
ELSE
changed_lat = OLD.lat;
changed_lng = OLD.lng;
END IF;
IF earth_box(ll_to_earth(specified_lat, specified_lng), specified_radius) @> ll_to_earth(changed_lat, changed_lng)
PERFORM pg_notify(// notification specification here);
ENDIF
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
:今、私は変更され、ユーザーの緯度とLNGポイントが指定された緯度とLNGポイントの指定された半径内にある場合、通知を発射すなわち、これは、where句を使用するように見えますストアドプロシージャを作成したいですしかし、これは本質的にちょうど擬似コードのようには機能しません。何とかこれを起こすことができますか?