1

非常に大きなテーブルの一連の行に対して非常に複雑な操作を行う必要があります。

操作 (JOIN、UNION、およびいくつかの ORDER BY に基づく「バックフィル」の null 属性) は、関数で行うのが最適なようです。行数を最小限に抑えるには、最初に WHERE 句が必要です。

これらはすべて Rails と通信するため、外側のレイヤーは VIEW である必要があります。

私が持っているバックフィルを差し引いたものは

CREATE OR REPLACE VIEW testing.for_sale_layouts_view
AS SELECT * from bestforsalelayout((select address_id from public.for_sale_layouts limit 1));
;

CREATE OR REPLACE FUNCTION bestforsalelayout(addr_id int)
RETURNS public.for_sale_layouts
AS $$
    select * from public.for_sale_layouts where address_id = addr_id;
$$
LANGUAGE SQL IMMUTABLE;

のように呼ばれる

select * from testing.for_sale_layouts_view where address_id = <addr_id>;

この種の機能は機能しますが、for_sale_layouts によって返される行が複数ある場合、関数は何も返さず、シングルトン行は正常に機能します。

私は途方に暮れています。作業方向へのポインタは大歓迎です。

4

1 に答える 1

1

複数の行を返したい場合return tableは、関数の形式が必要です。

こちらのドキュメントをご覧ください。

CREATE OR REPLACE FUNCTION bestforsalelayout(addr_id int)
RETURNS table(for_sale_layouts int)
AS $$
    select for_sale_layouts from public.for_sale_layouts where address_id = addr_id;
$$
于 2013-06-04T02:03:10.440 に答える