2017-11-03 1 views
0

plpgsql을 사용하여 PostgreSQL DB에서 함수를 작성해야하는지, 아니면 언어 프로그래밍이 작동하더라도 python/java 클래스에서이 함수를 만들어야하는지 여부는 알 수 없습니다.plpgsql (postgresql) 또는 파이썬 클래스에서 함수를 만드는 것이 더 좋을까요?

내 상사가 왜 필자가 파이썬이 아닌 plpgsql에 함수를 작성했는지 물었고, 왜 더 나은 결과를 얻었는지 신뢰할 수있는 답을 줄 수 없었습니다.

Google에 대한 정보가 있으며 이에 대한 정보를 찾을 수 없습니다. plpgsql에서 함수를 수행하는 것에 대해 상상할 수있는 유일한 점은 프로그래밍 언어를 변경하면 함수를 호출하고 새 언어로 다시 작성하지 않아도됩니다.

이것은 stackoverflow 멤버의 도움으로 작성한 plpgsql의 예제입니다. 파이썬 클래스에서 다시 작성해야하거나 db 내부에 함수로 남겨두고 파이썬 클래스에서 함수를 호출해야합니까?

CREATE OR REPLACE FUNCTION createid(idslist varchar[], objecttype varchar) 
RETURNS TABLE(original_id varchar, new_id varchar) as 
$$ 
declare 
l_prefix text; 
BEGIN 
IF LOWER(objectType) = 'global' THEN 
    l_prefix := 'GID'; 
ELSE 
    l_prefix := 'ORG'; 
END IF; 
RETURN QUERY 
INSERT INTO idstable(original_id, new_id) 
select t.x, l_prefix||nextval('mapSquema.globalid')::TEXT 
from unnest(idslist) as t(x) 
returning * 
END; 
$$ LANGUAGE plpgsql; 
+2

좋은 질문입니다. 하지만 정답은 없습니다. "데이터베이스 대 애플리케이션의 비즈니스 로직"을위한 Google. 어떤 사람들은 나쁜 습관이라고 생각합니다. 그러나 나는 완전히 동의하지 않는다. 그것은 모두 상반 관계와 아키텍처에 관한 것입니다. – AlexM

+0

고마워, 나는 그것을 어떻게 구글로 몰랐다. –

답변

2

저장 프로 시저의 일부 장점은 일반적있다 :

  • 클라이언트 측 데이터 이동을 최소화 할 수 있고,
  • 네트워크 트래픽을 줄일 수 있고,
  • 서버 측 코드이며
  • 데이터 처리 부분과 데이터 표시 부분에서 분해하는 데 도움이됩니다.
  • 보안 정의 자 기능이있는
  • 을 사용하면 저장 프로 시저없이 보안 수준을 높일 수 있습니다.

때때로 이러한 기능은 흥미롭고 매우 빠르고 잘 유지 관리되는 응용 프로그램을 개발하는 데 도움이됩니다.

+0

루프에 대해 생각하는 것이 맞는지 아닌지는 잘 모르겠지만, 틀렸다면 수정하십시오. plpgsql에서 함수를 만들면 데이터베이스에 한 번 호출합니다. 파이썬에서 함수를 만들고 배열을 통해 루프하면 "len (array)"가 db에 호출됩니다. 그렇다면 plpgsql의 기능이 더 낫지 않습니까? –

+0

그것은 당신이 무엇을 하느냐에 달려 있습니다. 루프는 속도는 같지만 일부 오버 헤드가 있습니다. 데이터 형식 변환, 클라이언트 측의 데이터 처리와 관련된 네트워크 오버 헤드입니다. 저장 프로 시저를 사용할 때 제거됩니다. 이 오버 헤드는 꽤 중요합니다. 저장 프로 시저를 사용할 때보 다 속도를 10 배나 증가시킵니다. –

관련 문제