Postgresql 使用plpgsql中的记录的范围问题

Postgresql 使用plpgsql中的记录的范围问题,postgresql,scope,plpgsql,dynamic-sql,records,Postgresql,Scope,Plpgsql,Dynamic Sql,Records,我试图在execute语句中使用记录中的数据: for rec1 in SELECT * FROM table1 limit 1000 loop FOR loop_row IN select 'geom_wgs_pois5' as col_name union all select 'geom_wgs_pois4' as col_name union all select 'geom_wgs_pois3'

我试图在execute语句中使用记录中的数据:

for rec1 in  SELECT * FROM table1 limit 1000 loop

    FOR loop_row IN
                    select 'geom_wgs_pois5' as col_name
          union all select 'geom_wgs_pois4' as col_name
          union all select 'geom_wgs_pois3' as col_name
          union all select 'geom_wgs_pois2' as col_name
          union all select 'geom_wgs_pois1' as col_name

    LOOP
    select rec1.loop_row into query;
    v_sql = 'select count(*)
             from   table2 a
             where  a.'||loop_row||' = '||query||'';
    execute $$v_sql$$;
    ..........
我曾尝试将记录直接放入v_sql中,但我认为这存在范围问题。当我尝试使用select语句“解包”记录时,也会出现错误

我在字符串中创建查询,然后使用execute语句的这种方法是有目的的。我已经用其他方法实现了相同的函数,但是它们太慢了。为了提高性能,我尝试引用一个包含更多列的表,以避免在查询中使用大量字符串操作


我正在参加8.2.15的博士后考试。我知道这是旧的,我应该升级,但这是我的公司提供给我的(因此,我在这件事上没有选择)。

不可能在PostgreSQL 8.2中比较动态SQL中的REC。您需要最低限度的PostgreSQL 8.4,在那里您应该使用一个子句
来使用
。在8.2中,您必须手动比较记录中的所有字段

有解决办法,但我不确定性能如何。您可以使用记录值创建临时表,然后在动态SQL中,您可以对表执行
JOIN