Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggugurkan Semua Fungsi Terlebih Dengan Nama dengan Selamat dalam PostgreSQL?

Bagaimana untuk Menggugurkan Semua Fungsi Terlebih Dengan Nama dengan Selamat dalam PostgreSQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-29 04:20:10956semak imbas

How to Safely Drop All Overloaded Functions by Name in PostgreSQL?

Menggugurkan Fungsi tanpa Nombor/Jenis Parameter Tertentu

Apabila mengurus fungsi yang disimpan dalam fail teks, menambah atau mengubah suai parameter fungsi boleh membuat lebihan beban. Memadam fungsi asal memerlukan penyenaraian secara manual semua jenis parameter, yang boleh menyusahkan.

Pertanyaan Asas

Untuk menangani ini, pertanyaan berikut menjana pernyataan DDL untuk menggugurkan semua fungsi dengan nama yang diberikan, tanpa mengira daripada parameter:

SELECT 'DROP FUNCTION ' || oid::regprocedure
FROM   pg_proc
WHERE  proname = 'my_function_name'  -- function name without schema-qualification
AND    pg_function_is_visible(oid);  -- restrict to current search path

Fungsi

Untuk pelaksanaan segera daripada pernyataan yang dijana, fungsi PL/pgSQL berikut boleh digunakan:

CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int)
LANGUAGE plpgsql AS
$func$
-- drop all functions with given _name in the current search path, regardless of function parameters
DECLARE
   _sql text;
BEGIN
   SELECT count(*)::int
        , 'DROP FUNCTION ' || string_agg(oid::regprocedure::text, '; DROP FUNCTION ')
   FROM   pg_catalog.pg_proc
   WHERE  proname = _name
   AND    pg_function_is_visible(oid)  -- restrict to current search path
   INTO   functions_dropped, _sql;     -- count only returned if subsequent DROPs succeed

   IF functions_dropped > 0 THEN       -- only if function(s) found
     EXECUTE _sql;
   END IF;
END
$func$;

Panggil fungsi seperti berikut untuk menggugurkan semua fungsi yang sepadan dengan nama yang ditentukan:

SELECT f_delfunc('my_function_name');

Fungsi kembali bilangan fungsi digugurkan atau 0 jika tiada yang ditemui.

Atas ialah kandungan terperinci Bagaimana untuk Menggugurkan Semua Fungsi Terlebih Dengan Nama dengan Selamat dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn