Rumah >pangkalan data >tutorial mysql >Bolehkah saya Menggugurkan Semua Fungsi Memadankan Nama Kad Liar dalam PostgreSQL, Tanpa mengira Parameternya?

Bolehkah saya Menggugurkan Semua Fungsi Memadankan Nama Kad Liar dalam PostgreSQL, Tanpa mengira Parameternya?

Patricia Arquette
Patricia Arquetteasal
2024-12-25 19:42:101052semak imbas

Can I Drop All Functions Matching a Wildcard Name in PostgreSQL, Regardless of Their Parameters?

Bolehkah saya Menggugurkan Fungsi dengan Wildcard, Tanpa Kira Parameter?

Pengenalan

Mengekalkan fungsi yang disimpan dalam fail teks boleh menjadi menyusahkan, terutamanya apabila menambah atau mengalih keluar parameter. Menaip susunan parameter yang tepat secara manual untuk setiap fungsi boleh menjadi membosankan. Artikel ini meneroka penyelesaian untuk menggugurkan semua fungsi dengan nama yang diberikan menggunakan kad bebas, menghapuskan keperluan untuk menentukan parameter.

Pertanyaan untuk Menggugurkan Fungsi

Untuk mencipta yang diperlukan Penyataan DDL, laksanakan pertanyaan berikut:

SELECT 'DROP FUNCTION ' || oid::regprocedure
FROM pg_proc
WHERE proname = 'my_function_name'  -- Replace 'my_function_name' with the target function name
AND pg_function_is_visible(oid);  -- Restrict to the current search path

Pertanyaan menghasilkan DROP Pernyataan FUNCTION dengan jenis hujah, petikan dua kali dan layak skema. Ini memastikan tiada kelemahan suntikan SQL dan sepadan dengan laluan carian semasa.

Fungsi untuk Melaksanakan Penyata Gugur

Untuk pelaksanaan segera pernyataan DROP, cipta 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$;

Panggil fungsi dengan nama fungsi yang dikehendaki ke lepaskan fungsi padanan dan kembalikan nombor yang digugurkan:

SELECT f_delfunc('my_function_name');

Pertimbangan Tambahan

  • Kaedah ini menggugurkan semua fungsi dengan nama yang diberikan, tanpa mengira parameter atau skema.
  • Berhati-hati semasa melaksanakan pertanyaan ini, kerana ia boleh mengalih keluar secara kekal functions.
  • Untuk versi Postgres sebelum 9.1, gunakan regproc dan pg_get_function_identity_arguments(oid) dan bukannya regprocedure dan fungsi string_agg.

Atas ialah kandungan terperinci Bolehkah saya Menggugurkan Semua Fungsi Memadankan Nama Kad Liar dalam PostgreSQL, Tanpa mengira 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