>데이터 베이스 >MySQL 튜토리얼 >매개변수에 관계없이 PostgreSQL에서 와일드카드 이름과 일치하는 모든 함수를 삭제할 수 있습니까?

매개변수에 관계없이 PostgreSQL에서 와일드카드 이름과 일치하는 모든 함수를 삭제할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-25 19:42:101008검색

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

매개변수에 관계없이 와일드카드를 사용하여 함수를 삭제할 수 있나요?

소개

유지관리 텍스트 파일에 저장된 함수는 특히 매개변수를 추가하거나 제거할 때 번거로울 수 있습니다. 각 기능에 대한 정확한 매개변수 순서를 수동으로 입력하는 것은 지루할 수 있습니다. 이 기사에서는 매개변수를 지정할 필요 없이 와일드카드를 사용하여 주어진 이름을 가진 모든 함수를 삭제하는 솔루션을 탐색합니다.

함수 삭제 쿼리

필요한 함수를 생성하려면 DDL 문에서는 다음 쿼리를 실행합니다.

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

쿼리는 큰따옴표로 묶인 인수 유형을 사용하여 DROP FUNCTION 문을 생성합니다. 그리고 스키마 자격을 갖추었습니다. 이는 SQL 주입 취약점을 방지하고 현재 검색 경로와 일치합니다.

Drop 문 실행 기능

DROP 문을 즉시 실행하려면 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$;

원하는 함수 이름으로 함수를 호출하여 일치하는 함수를 삭제하고 번호를 반환합니다. 삭제됨:

SELECT f_delfunc('my_function_name');

추가 고려 사항

  • 이 방법은 매개변수나 스키마에 관계없이 지정된 이름을 가진 모든 함수를 삭제합니다.
  • 이 쿼리를 실행할 때는 기능이 영구적으로 제거될 수 있으므로 주의하세요.
  • 이전 Postgres 버전의 경우 9.1, regprocedure 및 string_agg 함수 대신 regproc 및 pg_get_function_identity_arguments(oid)를 사용하십시오.

위 내용은 매개변수에 관계없이 PostgreSQL에서 와일드카드 이름과 일치하는 모든 함수를 삭제할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.