2016-06-23 2 views
0

In PostgreSQL wie erstelle ich eine Funktion, die eine tatsächliche Tabelle zurückgibt?In PostgreSQL wie erstelle ich eine Funktion, die eine tatsächliche Tabelle zurückgibt?

Zum Beispiel, wenn ich die folgende Funktion haben:

CREATE OR REPLACE FUNCTION cols(_table_name TEXT) 
RETURNS TABLE (column_name TEXT, 
       data_type TEXT) AS 
$$ 

SELECT column_name, 
     data_type 
FROM information_schema.columns 
WHERE table_name = _table_name 
ORDER BY column_name 
; 

$$ LANGUAGE sql; 

und die folgende Tabelle:

CREATE TABLE test (a TEXT, b INTEGER, c NUMERIC); 

Wenn ich SELECT cols('test'); laufen erhalte ich:

cols 
------------- 
(a,text) 
(b,integer) 
(c,numeric) 
(3 rows) 

Aber ich würde gerne in der Lage sein zu bekommen:

column_name | data_type 
-------------+----------- 
a   | text 
b   | integer 
c   | numeric 
(3 rows) 
+0

@jdigital Das ist mein Problem löste, aber ich weiß noch nicht, ob es vollständig meine Frage beantwortet. Wie hast du das gefunden? Weil ich auf Google und SO gesucht habe, und mir die ähnlichen Fragen-Links gründlich durchgesehen habe. –

+0

Ich habe eine Google-Suche nach "Postgres Return-Tabelle". Ich war damit nicht vertraut und wollte mehr lernen. – jdigital

+0

Vielleicht mit dem Rest Ihrer Frage wird dies helfen: Sie ohne eine SELECT tun FROM, siehe hier: [? Was ohne eine SELECT-Anweisung tut FROM verwendet für] (http://stackoverflow.com/questions/24155475/ what-does-a-select-Anweisung-ohne-aus-verwendet-für) – jdigital

Antwort

3

Die Funktion ist in Ordnung, es ist, wie Sie es sind aufgerufen wird.

Statt:

SELECT cols('test'); 

Verwendung

SELECT * FROM cols('test'); 
Verwandte Themen