78 / 100

DROP FUNCTION

Funksiyani o'chirish

Ushbu qo'llanmada PostgreSQLda foydalanuvchi funksiyasini ma'lumotlar bazasidan butunlay o'chirish uchun DROP FUNCTION buyrug'idan qanday foydalanishni o'rganasiz.

PostgreSQL DROP FUNCTION buyrug'iga kirish

DROP FUNCTION buyrug'i ma'lumotlar bazasidan maxsus yaratilgan foydalanuvchi funksiyasini butunlay o'chirib tashlaydi.

DROP FUNCTION buyrug'ining asosiy sintaksisi:

query.sql
DROP FUNCTION [IF EXISTS] function_name(parameters);

Sintaksis tushuntirishi:

  • function_name — o'chirilishi kerak bo'lgan funksiya nomi va uning parametrlari ro'yxati.
  • IF EXISTS — agar ko'rsatilgan funksiya bazada mavjud bo'lmasa, xatolik chiqarmasdan ogohlantirish berish uchun ishlatiladi.

Agar funksiyaga bog'liq boshqa ob'ektlar (masalan, triggerlar yoki operatorlar) mavjud bo'lsa, PostgreSQL uni o'chirishga yo'l qo'ymaydi (sukut bo'yicha RESTRICT rejimi amal qiladi).

Funksiyani unga bog'liq barcha ob'ektlar bilan birga o'chirish uchun CASCADE opsiyasidan foydalanishingiz mumkin:

query.sql
DROP FUNCTION [IF EXISTS] function_name(parameters) CASCADE;

Bir vaqtning o'zida bir nechta funksiyani o'chirish uchun ularning nomlarini vergul bilan ajratib ko'rsatish mumkin:

query.sql
DROP FUNCTION 
    function_name1(parameter), 
    function_name2(parameter), ...;

DROP FUNCTION amaliy misollari

Keling, avval sinov uchun bir nechta funksiyalarni yaratib olamiz:

Namunaviy funksiyalarni yaratish

  1. Umumiy zaxira miqdorini hisoblovchi funksiya:
query.sql
CREATE OR REPLACE FUNCTION get_total_inventory() 
    RETURNS INT 
AS 
$$
    SELECT SUM(quantity) FROM inventories;
$$ LANGUAGE SQL;
  1. Ma'lum oraliqdagi tovarlarni qaytaruvchi funksiya (ikkita parametrli):
query.sql
CREATE OR REPLACE FUNCTION get_inventory(min_qty INT, max_qty INT) 
RETURNS TABLE (product VARCHAR, warehouse VARCHAR, quantity INT) 
AS 
$$
    SELECT product_name, warehouse_name, quantity 
    FROM inventories
    JOIN products USING (product_id) 
    JOIN warehouses USING (warehouse_id)
    WHERE quantity >= min_qty AND quantity <= max_qty;
$$ LANGUAGE SQL;
  1. Aniq miqdor bo'yicha qidiruvchi xuddi shu nomdagi boshqa funksiya (ortiqcha yuklangan / overloaded function):
query.sql
CREATE OR REPLACE FUNCTION get_inventory(qty INT) 
RETURNS TABLE (product VARCHAR, warehouse VARCHAR, quantity INT) 
AS 
$$
    SELECT product_name, warehouse_name, quantity 
    FROM inventories
    JOIN products USING (product_id) 
    JOIN warehouses USING (warehouse_id)
    WHERE quantity = qty;
$$ LANGUAGE SQL;
  1. Oddiy arifmetik funksiyalar:
query.sql
CREATE OR REPLACE FUNCTION add(a INT, b INT) 
RETURNS INT 
AS 
$$
    SELECT a + b;
$$ LANGUAGE SQL;

CREATE OR REPLACE FUNCTION subtract(a INT, b INT) 
RETURNS INT 
AS
$$
    SELECT a - b;
$$ LANGUAGE SQL;

1) Oddiy funksiyani o'chirish

Agar funksiya nomi noyob bo'lsa (ya'ni uning bir xil nomli boshqa varianti bo'lmasa), parametrlarsiz ham o'chirish mumkin:

query.sql
DROP FUNCTION IF EXISTS get_total_inventory;

Funksiya muvaffaqiyatli o'chirildi.

2) Ortiqcha yuklangan (overloaded) funksiyalarni o'chirish

Agar ma'lumotlar bazasida bir xil nomli, lekin turli parametrlarga ega bir nechta funksiya mavjud bo'lsa, parametrlarni ko'rsatmasdan DROP FUNCTION qilsangiz, PostgreSQL xatolik beradi:

query.sql
DROP FUNCTION IF EXISTS get_inventory;

Xatolik:

matn
ERROR:  function name "get_inventory" is not unique
HINT:  Specify the argument list to select the function unambiguously.

Chunki bazada get_inventory(INT, INT) va get_inventory(INT) mavjud bo'lib, PostgreSQL aynan qaysi birini o'chirishni bilmaydi.

Shuning uchun aynan kerakli funksiyani uning parametrlar turlarini ko'rsatgan holda o'chirish zarur:

query.sql
DROP FUNCTION IF EXISTS get_inventory(INT);

Endi faqat bitta parametrli get_inventory(INT) funksiyasi o'chiriladi, ikkita parametrli variant esa bazada saqlanib qoladi.

Ikkita parametrli variantni o'chirish uchun:

query.sql
DROP FUNCTION IF EXISTS get_inventory(INT, INT);

3) Bir nechta funksiyani bir vaqtda o'chirish

Quyidagi buyruq bir vaqtning o'zida ham add, ham subtract funksiyalarini o'chiradi:

query.sql
DROP FUNCTION add, subtract;

Xulosa

  • DROP FUNCTION yordamida funksiyalar ma'lumotlar bazasidan butunlay o'chiriladi.
  • IF EXISTS funksiya mavjud bo'lmaganda yuzaga keladigan xatolikning oldini oladi.
  • Bir xil nomli (overloaded) funksiyalarni o'chirishda chalkashlik bo'lmasligi uchun ularning parametr turlarini aniq ko'rsatish shart.
  • Bog'liq ob'ektlar bilan birga o'chirish uchun CASCADE kalit so'zidan foydalaniladi.