Die Funktion erzeugt eine einfache HTML-Tabelle aus einer Abfrage:
create or replace function html_table (query text)
returns setof text language plpgsql as $$
declare
rec record;
header boolean := true;
begin
return next '<table>';
for rec in
execute format($q$
select row_to_json(q) json_row
from (%s) q
$q$, query)
loop
if header then
return query select
format ('<tr><th>%s</th></tr>', string_agg(key, '</th><th>'))
from json_each(rec.json_row);
header := false;
end if;
return query select
format ('<tr><td>%s</td></tr>', string_agg(value, '</td><td>'))
from json_each_text(rec.json_row);
end loop;
return next '</table>';
end $$;
Verwendungsbeispiel:
create temp table test_data (id int, name text, amount int);
insert into test_data values
(1, 'Jim', 10),
(2, 'Ann', 20),
(3, 'Bob', 30);
select html_table('select * from test_data');
html_table
--------------------------------------------------
<table>
<tr><th>id</th><th>name</th><th>amount</th></tr>
<tr><td>1</td><td>Jim</td><td>10</td></tr>
<tr><td>2</td><td>Ann</td><td>20</td></tr>
<tr><td>3</td><td>Bob</td><td>30</td></tr>
</table>
(6 rows)
Die Funktion verwendet json functionsrow_to_json()
, json_each_text()
und aggregate functionstring_agg()
, die kombiniert werden können, präsentieren Zeilen als Listen mit Spaltennamen und Werten, wie in diesem Beispiel:
Mit dieser Technik können Sie die Zeilen, die aus einer dynamisch ausgeführten Abfrage resultieren, frei formatieren. Die Funktion kann leicht durch Hinzufügen von HTML-IDs, Klassen usw. geändert werden.
Eine der möglichen Lösungen ist die Verwendung der Funktion 'query_to_xml' (https://www.postgresql.org/docs/current/static/functions-xml .html # FUNCTIONS-XML-MAPPING) und transformiere dann das Ergebnis mit XSLT – Abelisto
Die Frage als zu breit zu markieren ist offensichtlich absurd. Das OP sucht nach einer SQL-Funktion in Postgres, um aus jeder Abfrage eine HTML-Tabelle zu generieren. Sie sollten die gegebene akzeptierte Antwort und die OP-Kommentare ebenfalls berücksichtigen. – klin
ha? zu breit? Ich wette, es gibt andere, die das extrem hilfreich finden. Danke Klin, hoffe, dass die Seitenadministratoren diesen "Wartezustand" entfernen. –