| 윈 토토 : 문서 : 9.4 : 윈 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.4 : PL/메이저 토토 사이트 함수 | PostgreSQL : 문서 : 9.4 : PL/토토 캔 -토토 캔 Prossural Language | 43장. PL/Python - Python 절차적 언어 | PostgreSQL : 문서 : 9.4 : 스포츠 토토 베트맨 공유 | 
일반적으로 말하면, PL/Python의 목표는 다음을 제공하는 것입니다."자연스러운"토토 사이트 추천과 Python 세계 간의 매핑. 이는 아래에 설명된 데이터 매핑 규칙을 알려줍니다.
함수 인수는 토토 사이트 추천 유형에서 해당 Python 유형으로 변환됩니다:
포스트그레SQL부울파이썬으로 변환됨부울.
포스트그레SQL작은int그리고int파이썬으로 변환됩니다int. 포스트그레SQL비긴트그리고oid다음으로 변환됨긴Python 2 및 toint파이썬 3에서.
포스트그레SQL진짜그리고더블파이썬으로 변환됩니다플로트.
포스트그레SQL숫자파이썬으로 변환됨십진수. 이 유형은에서 가져옵니다.c십진수사용 가능한 경우 패키지합니다. 그렇지 않으면,십진수.십진수표준 라이브러리의 내용이 사용됩니다.c십진수보다 훨씬 빠릅니다.십진수. 그러나 Python 3.3에서는,c십진수이름으로 표준 라이브러리에 통합되었습니다.십진수이므로 더 이상 차이가 없습니다.
포스트그레SQL바이테아파이썬으로 변환됨strPython 2 및 to바이트Python 3. Python 2에서 문자열은 문자 인코딩 없이 바이트 시퀀스로 처리되어야 합니다.
토토 사이트 추천 문자열 유형을 포함한 다른 모든 데이터 유형은 Python으로 변환됩니다.str. Python 2에서 이 문자열은 토토 사이트 추천 서버 인코딩에 포함됩니다. Python 3에서는 모든 문자열과 마찬가지로 유니코드 문자열이 됩니다.
비스칼라 데이터 유형에 대해서는 아래를 참조하세요.
함수 반환 값은 다음과 같이 선언된 PostgreSQL 반환 데이터 유형으로 변환됩니다.
PostgreSQL 반환 유형이 다음과 같은 경우부울, 반환 값은에 따라 참인지 평가됩니다.파이썬규칙. 즉, 0과 빈 문자열은 false이지만 특히'f'사실입니다.
PostgreSQL 반환 유형이 다음과 같은 경우바이테아, 반환 값은 해당 Python 내장 기능을 사용하여 문자열(Python 2) 또는 바이트(Python 3)로 변환되고 결과가 변환됩니다.바이테아.
다른 모든 토토 사이트 추천 반환 유형의 경우 반환된 Python 값은 Python 내장 기능을 사용하여 문자열로 변환됩니다.str, 결과는 토토 사이트 추천 데이터 유형의 입력 함수에 전달됩니다.
Python 2의 문자열은 PostgreSQL에 전달될 때 PostgreSQL 서버 인코딩에 있어야 합니다. 현재 서버 인코딩에서 유효하지 않은 문자열은 오류를 발생시키지만 모든 인코딩 불일치를 감지할 수 있는 것은 아니므로 이 작업이 올바르게 수행되지 않으면 여전히 가비지 데이터가 발생할 수 있습니다. 유니코드 문자열은 자동으로 올바른 인코딩으로 변환되므로 이를 사용하는 것이 더 안전하고 편리할 수 있습니다. Python 3에서는 모든 문자열이 유니코드 문자열입니다.
비스칼라 데이터 유형에 대해서는 아래를 참조하세요.
선언된 토토 사이트 추천 반환 유형과 실제 반환 객체의 Python 데이터 유형 사이의 논리적 불일치는 플래그가 지정되지 않음에 유의하십시오. 어떤 경우에도 값이 변환됩니다.
SQL null 값이 함수에 전달되면 인수 값은 다음과 같이 나타납니다.없음파이썬에서. 예를 들어, 다음의 함수 정의는파이맥스표시됨PostgreSQL : 문서 : 9.4 : PL/메이저 토토 사이트 함수널 입력에 대해 잘못된 답을 반환합니다. 추가할 수도 있습니다STRICT만들 함수 정의에포스트그레SQL좀 더 합리적인 조치를 취하세요. null 값이 전달되면 함수는 전혀 호출되지 않고 자동으로 null 결과를 반환합니다. 또는 함수 본문에서 null 입력을 확인할 수 있습니다.
CREATE FUNCTION pymax (a 정수, b 정수)
  정수를 반환합니다.
AS $$
  (a가 없음) 또는 (b가 없음)인 경우:
    반환 없음
  a  b인 경우:
    반환하다
  b를 돌려주다
$$ 언어 plpythonu;
위에 표시된 대로 PL/Python 함수에서 SQL null 값을 반환하려면 해당 값을 반환합니다.없음. 이는 함수의 엄격한 여부와 관계없이 수행될 수 있습니다.
SQL 배열 값은 Python 목록으로 PL/Python에 전달됩니다. PL/Python 함수에서 SQL 배열 값을 반환하려면 Python 시퀀스(예: 목록 또는 튜플)를 반환하세요.
함수 생성 return_arr() 반환 정수[] AS $$ 반환 (1, 2, 3, 4, 5) $$ 언어 plpythonu; SELECT return_arr(); return_arr ------------- 1,2,3,4,5
Python에서 문자열은 Python 프로그래머에게 친숙할 수 있는 바람직하지 않은 효과를 가질 수 있는 시퀀스입니다.
함수 생성 return_str_arr() varchar[]를 반환합니다. AS $$ "안녕하세요"를 반환 $$ 언어 plpythonu; SELECT return_str_arr(); return_str_arr ---------------- h,e,l,l,o
복합 유형 인수는 Python 매핑으로 함수에 전달됩니다. 매핑의 요소 이름은 복합 유형의 속성 이름입니다. 전달된 행의 속성에 null 값이 있는 경우 값은 다음과 같습니다.없음매핑에 있습니다. 예는 다음과 같습니다.
CREATE TABLE 직원(
  이름 텍스트,
  급여 정수,
  연령 정수
);
CREATE FUNCTION 초과 지급(e 직원)
  반환 부울
AS $$
  e["salary"]  200000인 경우:
    True를 반환
  if (e["age"] < 30) 및 (e["salary"]  100000):
    True를 반환
  거짓을 반환
$$ 언어 plpythonu;
Python 함수에서 행 또는 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 다음 예에서는 다음과 같이 가정합니다.
CREATE TYPE 명명된_값 AS( 이름 텍스트, 값 정수 );
복합 결과는 다음과 같이 반환될 수 있습니다:
반환된 시퀀스 개체에는 복합 결과 유형에 필드가 있는 것과 동일한 수의 항목이 있어야 합니다. 인덱스가 0인 항목은 복합 유형의 첫 번째 필드에 할당되고 1은 두 번째 필드에 할당되는 식입니다. 예를 들면:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수) 명명된_값을 반환합니다. AS $$ return [ 이름, 값 ] # 또는 튜플로: return ( name, value ) $$ 언어 plpythonu;
모든 열에 대해 SQL null을 반환하려면 삽입없음해당 위치에.
각 결과 유형 열의 값은 열 이름을 키로 사용하여 매핑에서 검색됩니다. 예:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수) 명명된_값을 반환합니다. AS $$ return "이름": 이름, "값": 값
추가 사전 키/값 쌍은 무시됩니다. 누락된 키는 오류로 처리됩니다. 모든 열에 대해 SQL Null 값을 반환하려면 다음을 삽입하세요.없음해당 열 이름을 키로 사용합니다.
이것은 매핑과 동일하게 작동합니다. 예:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수)
  명명된_값을 반환합니다.
AS $$
  클래스 이름_값:
    def __init__ (self, n, v):
      self.name = n
      자기값 = v
  명명된_값(이름, 값)을 반환합니다.
  # 또는 단순히
  클래스 NV: 통과
  nv.name = 이름
  nv.value = 값
  네바다 반납
$$ 언어 plpythonu;함수아웃매개변수도 지원됩니다. 예를 들면:
CREATE FUNCTION multiout_simple(OUT i 정수, OUT j 정수) AS $$ 반환 (1, 2) $$ 언어 plpythonu; SELECT * FROM multiout_simple();
A PL/파이썬함수는 스칼라 또는 복합 유형 세트를 반환할 수도 있습니다. 반환된 객체가 내부적으로 반복자로 변환되기 때문에 이를 달성하는 방법에는 여러 가지가 있습니다. 다음 예에서는 복합 유형이 있다고 가정합니다.
다음 유형의 인사말 작성( 어떻게 텍스트, 누가 문자를 보내? );
설정된 결과는 다음에서 반환될 수 있습니다:
CREATE FUNCTION 인사말(텍스트 방법) RETURN SETOF 인사말 AS $$ # 목록을 복합 유형으로 포함하는 튜플을 반환합니다. # 다른 모든 조합도 작동합니다 return ( [ 방법, "세계" ], [ 방법, "토토 사이트 추천" ], [ 방법, "PL/Python" ] ) $$ 언어 plpythonu;
CREATE FUNCTION 인사말(텍스트 방법)
  RETURN SETOF 인사말
AS $$
  클래스 프로듀서:
    def __init__ (자신, 어떻게, 누구):
      self.how = 어떻게
      self.who = 누구
      self.ndx = -1
    def __iter__ (자체):
      자기 자신을 돌려보내다
    def 다음 (자체):
      self.ndx += 1
      self.ndx == len(self.who)인 경우:
        StopIteration 높이기
      반환( self.how, self.who[self.ndx] )
  반환 생산자(방법, [ "World", "PostgreSQL", "PL/Python" ])
$$ 언어 plpythonu;CREATE FUNCTION 인사(텍스트 방법)
  RETURN SETOF 인사말
AS $$
  [ "World", "토토 사이트 추천", "PL/Python" ]에서 누구를 위해:
    산출물(어떻게, 누가)
$$ 언어 plpythonu;
| 경고 | 
| 
 파이썬으로 인해버그 #1483133, Python 2.4의 일부 디버그 버전(옵션으로 구성 및 컴파일됨--with-pydebug)는 다음을 충돌시키는 것으로 알려져 있습니다.포스트그레SQL반복자를 사용하여 설정된 결과를 반환할 때 서버. 패치되지 않은 Fedora 4 버전에는 이 버그가 포함되어 있습니다. Python의 프로덕션 버전이나 Fedora 4의 패치 버전에서는 발생하지 않습니다.  | 
설정 반환 함수출력매개변수(사용SETOF 레코드 반환)도 지원됩니다. 예를 들면:
CREATE FUNCTION multiout_simple_setof(n 정수, OUT 정수, OUT 정수) SETOF 레코드 AS $$를 반환합니다. 반환 [(1, 2)] * n $$ 언어 plpythonu; SELECT * FROM multiout_simple_setof(3);