Masalahnya adalah Anda melewatkan parameter (db_row
) dari jenis record
ke pernyataan SQL, tetapi nilai seperti itu tidak memiliki struktur yang diketahui untuk mesin SQL. Anda bahkan tidak dapat mentransmisikannya ke jenis tabel.
Salah satu solusi buruk yang dapat saya pikirkan adalah untuk mentransmisikan catatan ke representasi teksnya (yang berfungsi dengan panggilan ke fungsi output tipe) dan kemudian melemparkan tes ke tipe tabel yang diinginkan.
Ini adalah contoh kode yang menggambarkan apa yang saya maksud:
DO $$
DECLARE
r record;
n name;
BEGIN
/* find all tables with a column "oid" */
FOR r IN
SELECT t.*
FROM pg_class t
JOIN pg_attribute a ON a.attrelid = t.oid
WHERE a.attname = 'oid'
LOOP
/* get the table name */
EXECUTE format(
'SELECT ($1::text::%s).relname',
'pg_class'
) INTO n USING r;
RAISE NOTICE 'Table name: %', n;
END LOOP;
END;
$$;