토토 캔 9.0.23 문서화 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.0 : PL/토토 베이 함수 | up | 42 장. PL/Python -Python Prossural Language | 젠 토토 : 문서 : 9.0 : 데이터 공유 |
일반적으로 pl/python의 목표는 a를 제공하는 것입니다."자연"토토 캔 및 Python Worlds. 이것은 데이터 매핑을 알려줍니다 아래에 설명 된 규칙.
함수 인수는 토토 캔 유형에서 변환됩니다 해당 파이썬 유형 :
토토 캔부울로 변환됩니다 파이썬bool.
토토 캔smallintandintPython으로 변환int. 토토 캔bigintis 로 변환LongPython 2에서intPython 3에서
토토 캔Real, 더블및숫자are Python으로 변환float. 주목하십시오숫자이것은 잃어버린다 정보는 잘못된 결과로 이어질 수 있습니다. 이것은 할 수 있습니다 향후 릴리스에 고정되어 있습니다.
토토 캔BYTEA로 변환됩니다 파이썬strPython 2에서바이트Python 3. Python 2에서 문자열은 아무 것도없이 바이트 시퀀스로 취급되어야합니다. 캐릭터 인코딩.
토토 캔 문자를 포함한 다른 모든 데이터 유형 문자열 유형은 파이썬으로 변환됩니다str. Python 2에서는이 문자열이 있습니다 Postgresql 서버 인코딩; Python 3에서는 a 모든 문자열과 같은 유니 코드 문자열.
Nonscalar 데이터 유형은 아래를 참조하십시오.
함수 리턴 값이 선언 된 것으로 변환됩니다 토토 캔 다음과 같이 데이터 유형을 반환합니다.
토토 캔 반환 유형이있을 때부울, 반환 값이 평가됩니다 진실에 따른Python규칙. 즉, 0과 빈 문자열은 거짓이지만 특히'F'진실입니다.
토토 캔 반환 유형이있을 때BYTEA, 리턴 값이 a로 변환됩니다 각각을 사용하여 문자열 (Python 2) 또는 바이트 (Python 3) Python Buildins, 결과가 변환BYTEA.
다른 모든 토토 캔 리턴 유형의 경우 반환 파이썬 값은 파이썬을 사용하여 문자열로 변환됩니다. 내장str토토 캔 데이터의 입력 함수로 전달되었습니다 유형.
Python 2의 문자열은 Postgresql에 있어야합니다. 서버 인코딩 토토 캔로 전달 될 때. 문자열 현재 서버 인코딩에서 유효하지 않은 오류를 제기하지만 모든 인코딩 불일치가 될 수있는 것은 아닙니다. 감지되므로 쓰레기 데이터는 그렇지 않을 때 여전히 발생할 수 있습니다. 올바르게 완료되었습니다. 유니 코드 스트링은 자동으로 인코딩을 올바르게하므로 더 안전하고 사용하기 편리합니다. 파이썬 3에서는 모든 문자열이 있습니다 유니 코드 문자열.
Nonscalar 데이터 유형은 아래를 참조하십시오.
선언 된 토토 캔 사이의 논리적 불일치 리턴 유형 및 실제 반환의 파이썬 데이터 유형 객체는 신고되지 않습니다. 값은 어느 곳에서나 변환됩니다 사례.
팁 : pl/python함수는 유형 중 하나를 반환 할 수 없습니다레코드또는Setof Record. 에이 해결 방법은 A를 작성하는 것입니다.pl/pgsql생성하는 함수 a 임시 테이블, 호출하도록하십시오.pl/python테이블을 채우는 기능, 그리고pl/pgsql함수 generic을 반환레코드임시 표에서
SQL NULL 값이 함수로 전달되면 인수
값은로 나타납니다.없음파이썬에서.
예를 들어,의 함수 정의Pymax
표시섹션 42.2잘못 반환합니다
널 입력에 대한 답변. 우리는 추가 할 수 있습니다엄격한토토 캔더 많은 일을하십시오
합리적 : 널 값이 전달되면 함수는
전혀 전화를 걸었지만 널 결과를 반환합니다.
자동으로. 또는 NULL 입력을 확인할 수 있습니다
기능 본문 :
기능 생성 Pymax (A Integer, B Integer) 정수를 반환합니다 $$로 (a는 없음) 또는 (b는 없음)이면 : 반환 없음 A B : 반환 a 반환 b $$ 언어 plythonu;
위와 같이, pl/python에서 sql null 값을 반환하려면 함수, 값을 반환없음. 이것 함수가 엄격한 지 여부에 관계없이 수행 할 수 있습니다.
SQL 어레이 값은 Python 목록으로 PL/Python으로 전달됩니다. PL/Python 함수에서 SQL 배열 값을 반환하려면 예를 들어 목록 또는 튜플과 같은 파이썬 시퀀스를 반환하십시오.
함수 만들기 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 --------------- 안녕하세요
복합 유형 인수는 다음과 같은 함수로 전달됩니다 파이썬 매핑. 매핑의 요소 이름은 합성 유형의 속성 이름. 속성 인 경우 전달 된 행은 널 값을 가지고 있으며 값이 있습니다없음매핑에서. 예는 다음과 같습니다.
테이블 직원 생성 ( 이름 텍스트, 급여 정수, 시대 정수 ); 기능 초과 지불 (E 직원) 생성 부울을 반환합니다 $$로 E [ "급여"] 200000 : 진실을 반환하십시오 if (e [ "age"] <30) 및 (e [ "Salary"] 100000) : 진실을 반환하십시오 거짓을 반환하십시오 $$ 언어 plythonu;
행 또는 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 파이썬 기능에서. 다음 예는 우리를 가정합니다 가지다:
type name_value 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;
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 또는 ON의 생산 버전에서는 발생하지 않습니다 페도라의 패치 버전 4. |