A un esame più attento:devi solo dividere il tipo di reso composito in questo modo:
CREATE OR REPLACE VIEW "Sumario" AS
SELECT ...
(conta_relatos("Fatores"."ID", "Fatores_1"."ID")).*
FROM ...
Dettagli sull'accesso ai tipi compositi nel manuale.
Per inciso:consiglierei di non usare parentesi per i tuoi JOIN a meno che tu non sappia esattamente cosa stai facendo. Il modo in cui lo hai, stai forzando un particolare piano di esecuzione. È probabile che non sia il migliore.
Il primo approccio ha interpretato erroneamente il messaggio di errore
Quando definisci una funzione con RETURNS record
(che evito quando possibile), devi fornire un elenco di definizioni di colonna con ogni chiamata, come:
SELECT * FROM conta_relatos(1,2) AS f(col1 int, col2 text, ...)
Cito il manuale qui :
La soluzione pulita è modificare la funzione per restituire un tipo noto invece di un record anonimo. Ci sono vari modi per farlo, a seconda delle circostanze. Se hai problemi a riscrivere la tua funzione, apri un'altra domanda.