롤 토토 : 문서 : 9.5 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.5 : PL/롤 토토 함수 | PostgreSQL : 문서 : 9.5 : PL/토토 사이트 -토토 사이트 Prossural Language | CHAPTER 43. PL/PYTHON- 파이썬 절차 언어 | PostgreSQL : 문서 : 9.5 : 사설 토토 사이트 공유 |
일반적으로 pl/python의 목표는 a를 제공하는 것입니다."자연"롤 토토과 Python 세계 사이의 매핑. 이것은 아래에 설명 된 데이터 매핑 규칙을 알려줍니다.
PL/Python 함수가 호출되면 인수는 롤 토토 데이터 유형에서 해당 Python 유형으로 변환됩니다.
롤 토토부울Python으로 변환bool.
롤 토토smallintandintPython으로 변환int. 롤 토토bigintandOIDLongPython 2에서intPython 3에서
롤 토토Realand더블Python으로 변환float.
롤 토토숫자Python으로 변환10 진수. 이 유형은에서 가져옵니다cdecimal사용 가능한 경우 패키지. 그렇지 않으면,Decimal.decimal표준 라이브러리에서 사용됩니다.cdecimal보다 훨씬 빠릅니다Decimal. 그러나 파이썬 3.3 이상에서cdecimal이름으로 표준 라이브러리에 통합되었습니다Decimal, 더 이상 차이가 없습니다.
롤 토토BYTEAPython으로 변환strPython 2에서바이트Python 3. Python 2에서 문자열은 문자 인코딩없이 바이트 시퀀스로 취급되어야합니다.
롤 토토 문자열 유형을 포함한 기타 모든 데이터 유형은 Python으로 변환됩니다str. Python 2에서는이 문자열이 롤 토토 서버 인코딩에 있습니다. Python 3에서는 모든 문자열과 같은 유니 코드 문자열입니다.
Nonscalar 데이터 유형에 대해서는 아래를 참조하십시오.
pl/python 함수가 반환되면 반환 값이 함수의 선언 된 롤 토토 리턴 데이터 유형으로 변환됩니다..
롤 토토 리턴 유형이있을 때부울, 반환 값은 진실에 대해 평가됩니다.Python규칙. 즉, 0이고 빈 문자열은 거짓이지만 특히'f'진실입니다.
롤 토토 반환 유형이있을 때BYTEA, 리턴 값은 각각의 Python 내장을 사용하여 문자열 (Python 2) 또는 바이트 (Python 3)로 변환되며 결과는로 변환됩니다.BYTEA.
다른 모든 롤 토토 리턴 유형의 경우, 반환 값은 파이썬 내장을 사용하여 문자열로 변환됩니다str, 결과는 롤 토토 데이터 유형의 입력 함수로 전달됩니다. (Python 값이 A 인 경우float,를 사용하여 변환됩니다Repr대신 내장str, 정밀도 손실을 피하기 위해.)
Python 2의 문자열은 롤 토토로 전달 될 때 롤 토토 서버 인코딩에 있어야합니다. 현재 서버 인코딩에서 유효하지 않은 문자열은 오류가 발생하지만 모든 인코딩 불일치가 감지 될 수는 없으므로 가비지 데이터가 올바르게 수행되지 않을 때 여전히 발생할 수 있습니다. 유니 코드 문자열은 올바른 인코딩으로 자동으로 변환되므로 더 안전하고 사용하는 것이 더 편리 할 수 있습니다. Python 3에서는 모든 문자열이 유니 코드 문자열입니다.
Nonscalar 데이터 유형은 아래를 참조하십시오.
선언 된 롤 토토 반환 유형과 실제 반환 객체의 Python 데이터 유형 사이의 논리적 불일치가 플래그가 지정되지 않았다는 점에 유의하십시오. 값은 어쨌든 변환됩니다.
SQL NULL 값이 함수로 전달되면 인수 값이로 나타납니다.없음파이썬에서. 예를 들어,의 함수 정의Pymax
표시PostgreSQL : 문서 : 9.5 : PL/롤 토토 함수will return the wrong answer for null inputs. 우리는 추가 할 수 있습니다엄격한롤 토토더 합리적인 일을하십시오 : 널 값이 전달되면 함수는 전혀 호출되지 않지만 자동으로 널 결과를 반환합니다. 또는 기능 본문에서 NULL 입력을 확인할 수 있습니다.
기능 생성 Pymax (A Integer, B Integer) 정수를 반환합니다 $$로 (a는 없음) 또는 (b는 없음)이면 : 반환 없음 A B : 반환 a 반환 b $$ 언어 plythonu;
위와 같이, pl/python 함수에서 SQL NULL 값을 반환하려면 값을 반환없음. 기능이 엄격한 지 여부에 관계없이 수행 할 수 있습니다.
SQL 어레이 값은 Python 목록으로 PL/Python으로 전달됩니다. PL/Python 함수에서 SQL 어레이 값을 반환하려면 Python 시퀀스 (예 : 목록 또는 튜플)를 반환하십시오.
함수 만들기 return_arr () int []를 반환합니다. $$로 반환 (1, 2, 3, 4, 5) $$ 언어 plpythonu; return_arr ()를 선택하십시오. return_arr ------------- 1,2,3,4,5
파이썬에서 문자열은 시퀀스이며, 이는 파이썬 프로그래머에게 친숙 할 수있는 바람직하지 않은 효과를 가질 수 있습니다 :
함수 만들기 return_str_arr () varchar []를 반환합니다. $$로 "안녕하세요"반환 $$ 언어 plpythonu; return_str_arr ()를 선택하십시오. return_str_arr --------------- 안녕하세요
복합 유형 인수는 Python 매핑 기능으로 전달됩니다. 매핑의 요소 이름은 복합 유형의 속성 이름입니다. 전달 된 행의 속성에 NULL 값이 있으면 값이 있습니다.없음매핑에서. 예는 다음과 같습니다.
테이블 직원 생성 ( 이름 텍스트, 급여 정수, 시대 정수 ); 기능 초과 지불 (E 직원) 생성 부울을 반환합니다 $$로 E [ "급여"] 200000 : 진실을 반환하십시오 if (e [ "age"] <30) 및 (e [ "Salary"] 100000) : 진실을 반환하십시오 거짓을 반환하십시오 $$ 언어 plythonu;
파이썬 함수에서 행 또는 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 다음 예는 다음과 같이 가정합니다.
유형을 만들어 afform as ( 이름 텍스트, 가치 정수 );
복합 결과는 a :로 반환 할 수 있습니다.
반환 된 시퀀스 객체에는 복합 결과 유형에 필드가있는 것과 동일한 수의 항목이 있어야합니다. 인덱스 0이있는 항목은 복합 유형의 첫 번째 필드, 1에서 두 번째 등에 할당됩니다. 예를 들어:
함수 만들기 make_pair (이름 텍스트, 값 정수) 이름을 name_value를 반환합니다 $$로 반환 [이름, 값] # 또는 대안 적으로 튜플 : return (이름, 값) $$ 언어 plythonu;
모든 열에 대해 SQL NULL을 반환하려면 삽입없음해당 위치에서.
각 결과 유형 열의 값은 열 이름을 키로 매핑에서 검색합니다. 예:
함수 만들기 make_pair (이름 텍스트, 값 정수) 이름을 name_value를 반환합니다 $$로 return "name": name, "value": value
추가 사전 키/값 쌍은 무시됩니다. 누락 된 키는 오류로 취급됩니다. 모든 열의 SQL NULL 값을 반환하려면 삽입없음해당 열 이름을 키로 사용합니다.
이것은 매핑과 동일하게 작동합니다. 예:
함수 만들기 make_pair (이름 텍스트, 값 정수) 이름을 name_value를 반환합니다 $$로 Class Named_value : def __init__ (self, n, v) : self.name = n self.value = v RETURN NAMED_VALUE (이름, 값) # 또는 간단히 클래스 NV : 패스 nv.name = 이름 nv.value = value 반환 nv $$ 언어 plythonu;
함수out매개 변수도 지원됩니다. 예를 들어:
함수 만들기 multiout_simple (out I Integer, out J Integer) $$ 반환 (1, 2) $$ 언어 plpythonu; multiout_simple ()에서 *를 선택하십시오.
apl/python함수는 스칼라 또는 복합 유형 세트를 반환 할 수도 있습니다. 반환 된 객체가 내부적으로 반복자로 바뀌기 때문에이를 달성하는 방법에는 여러 가지가 있습니다. 다음 예제는 복합 유형이 있다고 가정합니다.
유형 인사말 생성 AS ( 텍스트, 누가 문자 );
세트 결과는 a :에서 반환 할 수 있습니다.
기능 생성 인사말 (텍스트 방법) 정해진 인사말을 반환합니다 $$로 # 복합 유형으로 목록을 포함하는 튜플 리턴 # 다른 모든 조합도 작동합니다 return ([How, "World"], [How, "Postgresql"], [How, "Pl/Python"])))) $$ 언어 plythonu;
기능 생성 인사말 (텍스트 방법) 정해진 인사말을 반환합니다 $$로 클래스 프로듀서 : def __init__ (자기, 방법, 누가) : self.how = 방법 self.ho = 누가 self.ndx = -1 def __iter__ (self) : 자아를 반환하십시오 def next (self) : self.ndx += 1 if self.ndx == len (self.who) : 중지를 높이십시오 return (self.how, self.who [self.ndx]) 리턴 프로듀서 (How, [ "World", "Postgresql", "Pl/Python"])))) $$ 언어 plythonu;
기능 생성 인사말 (텍스트 방법) 정해진 인사말을 반환합니다 $$로 [ "World", "Postgresql", "pl/python"]의 사람을 위해 : 수율 (어떻게, 누가) $$ 언어 plythonu;
경고 |
Python으로 인해버그 #1483133, Python 2.4의 일부 디버그 버전 (옵션으로 구성 및 컴파일-with-pydebug)는 충돌하는 것으로 알려져 있습니다롤 토토서버 반복자를 사용하여 설정 결과를 반환 할 때. 패치되지 않은 버전의 Fedora 4에는이 버그가 포함되어 있습니다. Python의 생산 버전 또는 Fedora 4의 패치 버전에서는 발생하지 않습니다. |
|out매개 변수 (사용returns setof record)도 지원됩니다. 예를 들어:
함수 만들기 multiout_simple_setof (n Integer, Out Integer, Out Integer)는 record를 $$로 반환합니다. 반환 [(1, 2)] * n $$ 언어 plpythonu; multiout_simple_setof (3);에서 *를 선택하십시오.