Der von der Funktion zurückgegebene Datensatz enthält verkettete Spalten

Ich habe eine Tabelle, in der Kontoänderungen im Laufe der Zeit gespeichert werden. Ich muss das mit zwei anderen Tabellen zusammenfügen, um einige Datensätze für einen bestimmten Tag zu erstellen, falls diese Datensätze noch nicht existieren.

Um die Sache zu vereinfachen (hoffe ich), habe ich die Abfrage, die die korrekten Verlaufsdaten zurückgibt, in eine Funktion gekapselt, die eine Konto-ID und den Tag berücksichtigt.

Wenn ich ausführe"Select * account_servicetier_for_day(20424, '2014-08-12')"Ich erhalte das erwartete Ergebnis (alle von der Funktion zurückgegebenen Daten in separaten Spalten). Wenn ich die Funktion in einer anderen Abfrage verwende, werden alle Spalten zu einer zusammengefasst:

("2014-08-12 14:20:37",hollenbeck,691,12129,20424,69.95,"2Mb/1Mb 20GB Limit",2048,1024,20.000)

Ich verwende "PostgreSQL 9.2.4 unter x86_64-slackware-linux-gnu, kompiliert von gcc (GCC) 4.7.1, 64-bit".

Abfrage:

Select
    '2014-08-12' As day, 0 As inbytes, 0 As outbytes, acct.username, acct.accountid, acct.userid,
    account_servicetier_for_day(acct.accountid, '2014-08-12')
From account_tab acct
Where acct.isdsl = 1
    And acct.dslservicetypeid Is Not Null
    And acct.accountid Not In (Select accountid From dailyaccounting_tab Where Day = '2014-08-12')
Order By acct.username

Funktion:

CREATE OR REPLACE FUNCTION account_servicetier_for_day(_accountid integer, _day timestamp without time zone) RETURNS setof account_dsl_history_info AS
$BODY$
DECLARE _accountingrow record;
BEGIN
  Return Query
  Select * From account_dsl_history_info
  Where accountid = _accountid And timestamp <= _day + interval '1 day - 1 millisecond'
  Order By timestamp Desc 
  Limit 1;
END;
$BODY$ LANGUAGE plpgsql;

Antworten auf die Frage(2)

Ihre Antwort auf die Frage