기본 SELECT 문을 수행하기 위해 getStuff라는 사용자 지정 SQL 함수가 생성되었습니다. select * from getStuff('hello') 형식의 함수를 사용하면 제공된 매개변수 값을 기반으로 stuff 테이블에서 모든 행을 가져옵니다.
그러나 질문이 생깁니다. 순서 지정을 어떻게 구현할 수 있습니까? 효율성을 높이고 원하는 행만 검색하기 위해 이 함수를 제한합니까? getStuff 함수 내에서 order by 및limit 절을 직접 사용하는 것은 필터를 적용하기 전에 모든 행을 가져오기 때문에 비효율적입니다.
권장되는 솔루션은 PostgreSQL의 절차 언어인 PL/pgSQL을 활용하여 기능. PL/pgSQL을 사용하면 동적 SQL 쿼리를 구성하고 실행할 수 있어 매개변수 값 처리에 유연성이 제공됩니다.
PL/pgSQL의 예제 함수:
CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int) RETURNS SETOF stuff AS $func$ BEGIN RETURN QUERY EXECUTE ' SELECT * FROM stuff WHERE col = ORDER BY ' || quote_ident(_orderby) || ' ASC LIMIT ' USING _param, _limit; END $func$ LANGUAGE plpgsql;
이 함수는 세 가지 매개변수를 사용합니다. _param (필터링 기준 값), _orderby(정렬 기준 열), _limit(정렬 기준이 되는 최대 행 수) return).
함수 호출 방법:
SELECT * FROM get_stuff('hello', 'col2', 100);
RETURN QUERY EXECUTE를 사용하면 생성된 SQL 쿼리의 결과가 일괄적으로 반환됩니다. quote_ident는 식별자를 이스케이프하여 SQL 주입을 방지합니다. 매개변수는 SQL 삽입 및 잠재적인 캐스팅/인용 문제를 방지하기 위해 USING을 통해 전달됩니다.
더 복잡한 쿼리의 경우 format() 함수 사용을 고려하세요.
단순한 작업에는 SQL 함수가 적합할 수 있습니다. , PL/pgSQL은 테이블 함수에서 매개변수화된 ORDER BY 및 LIMIT 절을 처리할 때 더 큰 유연성과 최적화 기능을 제공합니다.
위 내용은 PostgreSQL 테이블 함수에서 매개변수화된 ORDER BY 및 LIMIT를 효율적으로 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!