PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

bagaimana cara mengembalikan tabel temp dari fungsi postgres?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres bersarang jika dalam kasus permintaan

  2. Masalah penyandian PostgreSQL saat menjalankan kueri dari baris perintah

  3. Ubah representasi tanggal postgres menjadi string ISO 8601

  4. Apa cara yang benar untuk menggunakan perbedaan pada (Postgres) dengan SqlAlchemy?

  5. Petunjuk HINT_PASS_DISTINCT_THROUGH mengurangi jumlah Entitas yang dikembalikan per halaman untuk PageRequest hingga di bawah ukuran halaman yang dikonfigurasi (PostgreSQL)