Funksiyani o'chirish
Ushbu qo'llanmada PostgreSQLda foydalanuvchi funksiyasini ma'lumotlar bazasidan butunlay o'chirish uchun DROP FUNCTION buyrug'idan qanday foydalanishni o'rganasiz.
DROP FUNCTION buyrug'i ma'lumotlar bazasidan maxsus yaratilgan foydalanuvchi funksiyasini butunlay o'chirib tashlaydi.
DROP FUNCTION buyrug'ining asosiy sintaksisi:
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:
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:
DROP FUNCTION
function_name1(parameter),
function_name2(parameter), ...;
Keling, avval sinov uchun bir nechta funksiyalarni yaratib olamiz:
CREATE OR REPLACE FUNCTION get_total_inventory()
RETURNS INT
AS
$$
SELECT SUM(quantity) FROM inventories;
$$ LANGUAGE 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;
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;
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;
Agar funksiya nomi noyob bo'lsa (ya'ni uning bir xil nomli boshqa varianti bo'lmasa), parametrlarsiz ham o'chirish mumkin:
DROP FUNCTION IF EXISTS get_total_inventory;
Funksiya muvaffaqiyatli o'chirildi.
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:
DROP FUNCTION IF EXISTS get_inventory;
Xatolik:
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:
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:
DROP FUNCTION IF EXISTS get_inventory(INT, INT);
Quyidagi buyruq bir vaqtning o'zida ham add, ham subtract funksiyalarini o'chiradi:
DROP FUNCTION add, subtract;
DROP FUNCTION yordamida funksiyalar ma'lumotlar bazasidan butunlay o'chiriladi.IF EXISTS funksiya mavjud bo'lmaganda yuzaga keladigan xatolikning oldini oladi.CASCADE kalit so'zidan foydalaniladi.