Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggugurkan Fungsi PostgreSQL Dengan Selamat Tanpa Mengetahui Parameternya?

Bagaimana untuk Menggugurkan Fungsi PostgreSQL Dengan Selamat Tanpa Mengetahui Parameternya?

DDD
DDDasal
2024-12-26 15:40:20991semak imbas

How to Safely Drop PostgreSQL Functions Without Knowing Their Parameters?

Menggugurkan Fungsi Tanpa Pengetahuan Parameter

Dalam Postgres, mengurus fungsi yang disimpan dalam fail teks boleh menjadi mencabar apabila menambah atau mengalih keluar parameter pada fungsi sedia ada. Untuk menangani isu ini, kaedah kad bebas wujud untuk menggugurkan semua fungsi dengan nama tertentu, tanpa mengira bilangan atau jenis parameter.

Pertanyaan Asas

Laksanakan pertanyaan berikut untuk menjana pernyataan DDL 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);

Ganti 'my_function_name' dengan nama fungsi sebenar anda (sensitif huruf besar dan tanpa petikan berganda). Pertanyaan ini mengembalikan senarai pernyataan DROP FUNCTION dengan jenis parameter yang betul untuk semua lebihan fungsi.

Pendekatan Fungsi

Untuk pelaksanaan segera kenyataan drop, pertimbangkan untuk mencipta fungsi PL/pgSQL :

CREATE OR REPLACE FUNCTION f_delfunc(_name text, OUT functions_dropped int)
LANGUAGE plpgsql AS
$func$
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)
   INTO functions_dropped, _sql;

   IF functions_dropped > 0 THEN
     EXECUTE _sql;
   END IF;
END
$func$;

Untuk menggugurkan semua fungsi yang dinamakan 'my_function_name':

SELECT f_delfunc('my_function_name');

Fungsi ini akan mengembalikan bilangan fungsi yang digugurkan.

Pertimbangan

  • Kaedah ini menggugurkan semua fungsi dengan nama yang ditentukan, tanpa mengira pemilik atau skema mereka.
  • Berhati-hati apabila menggunakan kaedah ini kerana ia boleh membawa kepada fungsi yang tidak diingini penyingkiran.
  • Untuk versi yang lebih lama daripada Postgres 9.1, sedikit pengubahsuaian diperlukan. Rujuk sejarah suntingan jawapan untuk mendapatkan butiran.

Atas ialah kandungan terperinci Bagaimana untuk Menggugurkan Fungsi PostgreSQL Dengan Selamat Tanpa Mengetahui Parameternya?. 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