i need help in my plpgsql, must return a temporary table that has dynamic columns, how can I do this? as the name of the columns may vary, I do not know how to finish this procedure Sorry, google translator :D
CREATE OR REPLACE FUNCTION getreport(reportid INTEGER, userId VARCHAR)
RETURNS SETOF RECORD AS 
$$
    DECLARE
        recordResultadoFinal RECORD;            
        recordResultadoNomeEspecificos RECORD;      
        varGetSqlRelatorio VARCHAR;         
        varAreaId queryreports.f_area%TYPE;
        varClientId queryreports.f_client%TYPE;
        varTableNameTemp VARCHAR := 'temp'||userId; 
        varSqlAlterTable VARCHAR := '';
        varSqlUpdateTemp VARCHAR := '';
        varNomeColunaSpecificData VARCHAR := '';
    BEGIN
        SELECT f_sql,f_area,f_client INTO varGetSqlRelatorio,varAreaId,varClientId FROM queryreports WHERE f_id = reportid;
        EXECUTE 'DROP TABLE IF EXISTS '||varTableNameTemp;
        EXECUTE 'CREATE TEMP TABLE '||varTableNameTemp||' AS '||varGetSqlRelatorio;
        EXECUTE 'CREATE INDEX processid_idx ON '||varTableNameTemp||' USING btree (processid)';
        FOR recordResultadoNomeEspecificos IN EXECUTE '
                                SELECT DISTINCT cs.f_id as idcoluna, cs.f_name as nomecoluna, cs.f_type as tipodado
                                FROM clientspecifics cs
                                INNER JOIN clientspecificdatas csd ON (cs.f_id = csd.f_clientspecific AND csd.f_process IN (SELECT processid FROM '||varTableNameTemp||'))
                                ORDER BY 2
                                  '
        LOOP
            varSqlAlterTable := varSqlAlterTable||' ALTER TABLE '||varTableNameTemp||' ADD COLUMN specific_'||recordResultadoNomeEspecificos.idcoluna||' varchar;';
            IF (recordResultadoNomeEspecificos.tipodado = 1) THEN varNomeColunaSpecificData := 'f_text';
            ELSIF (recordResultadoNomeEspecificos.tipodado = 2) THEN varNomeColunaSpecificData := 'f_name';
            ELSIF (recordResultadoNomeEspecificos.tipodado = 3) THEN varNomeColunaSpecificData := 'f_date';
            ELSIF (recordResultadoNomeEspecificos.tipodado = 4) THEN varNomeColunaSpecificData := 'f_value';
            ELSIF (recordResultadoNomeEspecificos.tipodado = 5) THEN varNomeColunaSpecificData := 'f_text';
            END IF;
            varSqlUpdateTemp := varSqlUpdateTemp||' UPDATE '||varTableNameTemp||' SET specific_'||recordResultadoNomeEspecificos.idcoluna||' = csd.'||varNomeColunaSpecificData||'
                                FROM clientspecificdatas csd
                                WHERE csd.f_process = processid 
                                AND csd.f_clientspecific = '||recordResultadoNomeEspecificos.idcoluna||';';
        END LOOP;
        EXECUTE varSqlAlterTable;
        EXECUTE varSqlUpdateTemp;
        RETURN QUERY EXECUTE 'SELECT * FROM '||varTableNameTemp;
    END;
$$ LANGUAGE 'plpgsql'; 
 
    