Penanganan anyelement
sebagai tipe pengembalian dijelaskan dalam Jenis Polimorfik
:
Argumen ini dalam kasus Anda adalah relation_name
diketik sebagai anyelement
, dan dengan meneruskan NULL::table1
, ini memang memberi tahu perencana bahwa panggilan khusus function1
. ini harus mengembalikan SETOF table1
. Sejauh ini bagus.
Sekarang masalahnya adalah setelah dijalankan, fungsi tersebut tidak mengembalikan SETOF table1
tapi sesuatu yang lain. Ini bukan yang diharapkan oleh pelaksana, karena itu kesalahannya.
Meskipun judul pertanyaannya adalah Bagaimana cara mengembalikan baris dinamis... , yang tampaknya Anda inginkan adalah kolom dinamis atau kumpulan hasil polimorfik.
Dan ini adalah perjuangan berat dengan SQL, karena untuk membangun rencana eksekusi kueri, perencana harus mengetahui setiap kolom dengan tipenya untuk setiap hasil antara. Jika Anda mendesain kueri Anda dengan fungsi yang harus dijalankan untuk menemukan struktur outputnya, yang menciptakan masalah ayam dan telur:perencanaan harus mendahului eksekusi, tidak dapat bergantung padanya.
Dengan teknik inferensi tipe dinamis yang diterapkan pada anyelement
, PostgreSQL sudah mendorong amplop untuk mengimplementasikan polimorfisme sebanyak mungkin dengan batasan ini.