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
Lepaskan: 2024-12-25 19:42:10
asal
1013 orang telah melayarinya

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
Salin selepas log masuk

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$;
Salin selepas log masuk

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

SELECT f_delfunc('my_function_name');
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan