다음에 샘플 함수가 있습니다.pl무지개 토토_function.sql. 당신이 작성한 무지개 토토 코드 함수로 변환됩니다. 예:
CREATE FUNCTION myfunc(text) 텍스트를 다음과 같이 반환합니다. '인수[0] 반환' 언어 'plpython';
다음으로 변형됩니다
def __pl무지개 토토_procedure_myfunc_23456():
반환 인수[0]
여기서 23456은 함수의 Oid입니다.
반환 값을 제공하지 않으면 Python은 다음을 반환합니다. 기본값없음그것은 그럴 수도 있고 아닐 수도 있습니다. 당신이 원하는. 언어 모듈은 무지개 토토의 None을 SQL로 변환합니다. NULL.
포스트그레SQL함수 변수
전역에서 사용할 수 있습니다.인수목록. 에서myfunc예,인수[0]전달된 모든 내용을 포함합니다.
텍스트 인수로 입력합니다. 에 대한myfunc2(텍스트,
정수), 인수[0]다음을 포함할 것입니다텍스트변수 및인수[1]그정수변수.
글로벌 사전 SD는 다음과 같은 데이터를 저장하는 데 사용할 수 있습니다. 함수 호출. 이 변수는 개인용 정적 데이터입니다. 글로벌 사전 GD는 모든 Python 함수에 사용 가능한 공개 데이터입니다. 백엔드 내에서. 주의해서 사용하세요.
각 함수는
Python 인터프리터, 전역 데이터 및 함수 인수
에서myfunc다음에는 사용할 수 없습니다myfunc2. 예외는 데이터입니다.
위에서 언급한 바와 같이 GD 사전에 있습니다.
함수가 트리거에 사용되면 사전 TD 거래 관련 값을 포함합니다. 트리거 튜플은 다음과 같습니다.TD["새"]및/또는TD["오래된"]트리거 이벤트에 따라 다릅니다.TD["이벤트"]이벤트를 다음과 같이 포함합니다. 문자열(삽입, 업데이트, 삭제또는알 수 없음). TD["언제"]에는 다음 중 하나가 포함됩니다. (이전, 이후, 또는알 수 없음). TD["레벨"]다음 중 하나를 포함함ROW, 진술문또는알 수 없음. TD["이름"]트리거 이름이 포함되어 있으며TD["relid"]다음의 관계 ID를 포함합니다. 트리거가 발생한 테이블입니다. 방아쇠가 있었다면 사용할 수 있는 인수로 호출됩니다.TD["args"][0]에TD["인수"][(n -1)].
만약 트리거"언제"이다이전, 돌아올 수도 있습니다없음또는"알았어"에서 튜플이 수정되지 않았음을 나타내는 무지개 토토 함수,"건너뛰기"이벤트를 중단하거나"수정됨"수정했음을 나타냅니다. 튜플.
PL/무지개 토토 언어 모듈은 자동으로 무지개 토토을 가져옵니다
호출된 모듈plpy. 기능과
이 모듈의 상수는 무지개 토토 코드에서 사용할 수 있습니다.
와 같이plpy.foo. 현재plpy함수를 구현합니다plpy.error("msg"), plpy.fatal("msg"), plpy.debug("msg")및plpy.notice("msg"). 그들은 대부분 다음과 같습니다
전화elog(레벨, "메시지"), 여기서레벨디버그, 오류, 치명적 또는 알림입니다.plpy.error그리고plpy.fatal실제로 무지개 토토 예외 발생
잡히지 않으면 PL/무지개 토토 모듈이 호출됩니다.elog(ERROR, 메시지)함수가
핸들러는 무지개 토토 인터프리터에서 반환됩니다. 멀리 뛰어내려
무지개 토토 인터프리터는 아마도 좋지 않을 것입니다.plpy를 올립니다.ERROR("msg")그리고plpy를 올립니다.FATAL("msg")호출과 동일plpy.error또는plpy.fatal.
추가로,plpy모듈
라는 두 가지 함수를 제공합니다.실행그리고준비. 전화 중plpy.execute쿼리 문자열과
선택적 제한 인수는 해당 쿼리가 실행되도록 하며
결과 개체에 반환된 결과입니다. 결과 객체는
목록 또는 사전 개체. 결과 객체는 다음을 통해 액세스할 수 있습니다.
행 번호 및 필드 이름. 다음과 같은 추가 메서드가 있습니다.nrows()수를 반환합니다.
쿼리에서 반환된 행 및상태이것은SPI_exec변수를 반환합니다. 결과 개체는 다음을 수행할 수 있습니다.
수정될 수 있습니다.
rv = plpy.execute("SELECT * FROM my_table", 5)
my_table에서 최대 5개의 행을 반환합니다. Ff my_table에 열이 있습니다 my_field는 다음과 같이 액세스됩니다.
foo = rv[i]["my_field"]
두 번째 기능plpy.prepare은 쿼리 문자열과 함께 호출되며, 인수 유형 목록은 다음과 같습니다.
쿼리에 바인드 변수가 있습니다.
plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])
text는 $1로 전달할 변수의 유형입니다.
준비한 후 기능을 사용하세요plpy.execute실행합니다.
rv = plpy.execute(계획, [ "이름" ], 5)
제한 인수는 호출에서 선택 사항입니다.plpy.execute.
PL/Python 모듈을 사용하여 계획을 준비할 때 자동으로 저장됩니다. SPI 문서 읽기(제21장) 이것이 무엇을 의미하는지 설명합니다. 집에 가져가라는 메시지는 다음과 같습니다.
계획 = plpy.prepare("몇 가지 쿼리")
계획 = plpy.prepare("다른 쿼리")
당신은 메모리 누수를 겪고 있습니다. 저장된 파일을 해제할 수 있는 방법이 없기 때문입니다. 계획. 저장되지 않은 계획을 사용하는 대안은 훨씬 더 고통스럽습니다. (나를 위해).