Menggugurkan Fungsi dengan Kad Liar
Dalam PostgreSQL, adalah mungkin untuk menggugurkan semua fungsi dengan nama tertentu tanpa mengira bilangan atau jenis parameternya mempunyai. Ini boleh berguna apabila mengurus sebilangan besar fungsi.
Pertanyaan Asas
Pertanyaan berikut mencipta semua pernyataan DDL yang diperlukan untuk menggugurkan semua fungsi dengan nama tertentu:
SELECT 'DROP FUNCTION ' || oid::regprocedure FROM pg_proc WHERE proname = 'my_function_name' AND pg_function_is_visible(oid);
Pertanyaan ini menjana pernyataan 'DROP FUNCTION' untuk setiap lebihan fungsi 'my_function_name', memastikan semua versi fungsi dialih keluar. Fungsi 'pg_function_is_visible()' memastikan bahawa hanya fungsi dalam laluan carian semasa dipilih.
Fungsi
Sebagai alternatif, anda boleh menggunakan fungsi PL/pgSQL untuk mengautomasikan proses menggugurkan fungsi dengan kad bebas:
CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int) LANGUAGE plpgsql AS $$ DECLARE _sql text; BEGIN SELECT count(*)::int , 'DROP FUNCTION ' || string_agg(oid::regprocedure::text, '; DROP FUNCTION ') FROM pg_proc WHERE proname = _name AND pg_function_is_visible(oid) INTO functions_dropped, _sql; IF functions_dropped > 0 THEN EXECUTE _sql; END IF; END $$;
Fungsi ini mengambil nama fungsi sebagai hujah dan mengembalikan bilangan fungsi yang digugurkan. Ia boleh dipanggil seperti berikut:
SELECT f_delfunc('my_function_name');
Nota
Atas ialah kandungan terperinci Bagaimana untuk Menggugurkan Semua Fungsi Terlalu Beban dengan Nama Khusus dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!