Saya sedang menulis skrip pengaturan untuk aplikasi yang merupakan tambahan untuk aplikasi lain, jadi saya ingin memeriksa apakah tabel untuk aplikasi lain ada. Jika tidak, saya ingin memberikan kesalahan bermanfaat kepada pengguna. Namun, saya tidak tahu skema apa yang akan menahan tabel.
DO LANGUAGE plpgsql $$
BEGIN
PERFORM 1
FROM
pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
n.nspname = current_setting('search_path')
AND c.relname = 'foo'
AND c.relkind = 'r'; -- not sure if I actually need this or not...
IF NOT FOUND THEN
RAISE 'This application depends on tables created by another application';
END IF;
END;
$$;
Namun, current_setting('search_path')
mengembalikan TEXT yang berisi "$user",public
secara default, yang tidak terlalu berguna.
Satu-satunya hal lain yang dapat saya pikirkan adalah mencoba memilih dari tabel dan menangkap pengecualian. Itu akan melakukan pekerjaan, tetapi saya tidak berpikir itu sangat elegan dan saya sudah membaca bahwa itu mahal untuk digunakan (meskipun mungkin itu akan baik-baik saja dalam skenario ini karena saya hanya menjalankannya sekali?).
sumber