Tabel sementara
Untuk menjawab pertanyaan Anda dalam judul:
Satu tidak bisa "kembalikan tabel temp dari fungsi postgres". Tabel sementara dibuat
dan secara otomatis terlihat oleh pengguna yang sama dalam sesi yang sama. Mereka dijatuhkan secara otomatis di akhir sesi (atau lebih cepat).
Fungsi tabel
Tapi fungsi set-return (alias "fungsi tabel") dapat digunakan seperti tabel:
CREATE OR REPLACE FUNCTION getresourceinfo(tablename regclass, opened_path int)
RETURNS TABLE (pathid int, name varchar, pbs varchar
, parentid varchar, resid int) AS
$func$
BEGIN
RETURN QUERY EXECUTE format(
'SELECT t.pathid, t.name, t.pbs, t.parentid, t.resid
FROM ' || tablename || ' t
WHERE t.opened_path = $1'
)
USING opened_path;
END
$func$ LANGUAGE plpgsql;
Hanya masuk akal untuk sekelompok tabel yang semuanya berbagi nama kolom kode keras dengan tipe data yang sama.
Panggil (seperti memilih dari tabel):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Mengapa tipe data regclass
untuk parameter tabel?
Nama tabel sebagai parameter fungsi PostgreSQL
kursor
Untuk kelengkapan:Seseorang dapat mengembalikan CURSOR
, yang akan menjadi konsep yang sangat mirip dengan apa yang Anda minta. Rincian dalam manual di sini.
Tapi saya hampir tidak pernah menggunakan kursor. Fungsi tabel sebagian besar lebih praktis.