[또는 교체] 함수 만들기이름([Argtype[, ...]]) 보고rettype언어langname| 불변 | 안정 | 휘발성 물질 | 널 입력 | NULL 입력에서 NULL을 반환합니다 | 엄격한 | [외부] 보안 개요 | [외부] 보안 정의기 | 처럼 '정의' | 처럼 'OBJ_FILE','link_symbol' ... [ 와 함께 (속성[, ...])]
함수 만들기새를 정의합니다 기능.함수 생성 또는 교체새 기능을 만들거나 기존을 교체합니다. 정의.
함수를 생성하는 사용자는 토토 핫.
매개 변수
생성 할 함수의 이름. 스키마 이름 인 경우 포함 된 다음 지정된 기능에서 기능이 생성됩니다 개요. 그렇지 않으면 현재 스키마에서 생성됩니다 (the 검색 경로 앞쪽에 하나; 보다current_schema ()). 새로운 이름 함수는 기존 기능과 동일하게 일치하지 않아야합니다. 인수 유형 동일한 스키마에서. 그러나 기능의 기능 다른 인수 유형은 이름을 공유 할 수 있습니다 (이것은이라고합니다.과부하).
함수 인수의 데이터 유형이있는 경우. 입력 유형은 기본, 복잡 또는 도메인 유형 일 수 있습니다. 기존 열의 유형과 동일합니다. a의 유형 칼럼은 서면으로 참조됩니다TableName.ColumnName%유형; 이것을 사용하면 때때로 a를 만드는 데 도움이 될 수 있습니다 변경에서 a의 정의로의 기능 테이블. 구현 언어에 따라도 가능합니다 지정할 수 있도록 허용"의사 유형"와 같은cstring. 의사 유형은 실제임을 나타냅니다 인수 유형은 불완전하게 지정되거나 외부입니다 일반 SQL 데이터 유형 세트.
반환 데이터 유형. 리턴 유형이 지정 될 수 있습니다 기본, 복잡 또는 도메인 유형 또는 유형과 동일하게 기존 열의. 구현에 따라 언어로 지정할 수 있습니다"의사 유형"와 같은cstring. 그만큼setof수정자는 함수가 세트를 반환 할 것을 나타냅니다. 단일 항목이 아닌 항목.
함수가있는 언어의 이름 구현.SQL, C, 내부또는 사용자 정의의 이름 절차 언어. (참조Createlang.) 호환성, 이름은 단일로 동봉 될 수 있습니다 인용 부호.
이러한 속성은 시스템에 안전한 지 여부를 알려줍니다. 함수의 여러 평가를 단일로 바꾸십시오 런타임 최적화를위한 평가. 최대 하나의 선택 지정해야합니다. 이 중 어느 것도 나타나지 않으면휘발성기본 가정입니다.
불변함수는 항상 동일하게 동일한 결과를 반환합니다. 인수 값; 즉, 데이터베이스 조회를 수행하지 않습니다 또는 그렇지 않으면 정보가 직접 존재하지 않는 정보를 사용하십시오 매개 변수 목록. 이 옵션이 제공되면 모든 호출 모든 논쟁이있는 기능은 즉시있을 수 있습니다 함수 값으로 대체되었습니다.
안정적인a 단일 테이블 스캔 함수는 일관되게 반환합니다 동일한 인수 값에 대해 동일한 결과이지만 결과는 SQL 문에서 변경 될 수 있습니다. 이것은입니다 결과에 의존하는 함수에 대한 적절한 선택 데이터베이스 조회, 매개 변수 (예 : 현재) 시간대) 등current_timestamp기능 가족 내부의 가치가 변하지 않기 때문에 안정적인 자격 거래.
휘발성단일 테이블 스캔에서도 기능 값이 변경 될 수 있습니다. 따라서 최적화를 할 수 없습니다. 비교적 적은 데이터베이스 이런 의미에서 기능은 휘발성입니다. 몇 가지 예는입니다.random (), currval (), TimeOfday (). 어떤 함수가 있는지에 유의하십시오 부작용은 그 경우에도 휘발성으로 분류되어야합니다 결과는 통화를 방지하기 위해 예측 가능합니다 최적화; 예는입니다.setVal ().
NULL 입력 호출( 기본값)는 함수가 호출 될 것임을 나타냅니다 일반적으로 일부 논쟁이 무인 상태 일 때. 그때입니다 NULL을 확인하는 토토 핫 저자의 책임 필요한 경우 가치와 적절하게 응답합니다.
null 입력에서 null을 반환또는엄격한함수를 나타냅니다 인수가 무효 일 때마다 항상 널을 반환합니다. 이 매개 변수가 지정되면 함수는 그렇지 않습니다 널 주장이있을 때 실행; 대신 널 결과는 자동으로 가정됩니다.
Security Invoker를 나타냅니다 토토 핫은 그것을 호출하는 사용자. 그것은 기본입니다.Security Definer함수를 지정합니다 사용자의 권한으로 실행해야합니다. 그것을 만들었습니다.
키워드외부is SQL 호환성을 위해 존재하지만 그 이후로는 선택 사항입니다 SQL 에서이 기능은 외부에만 적용되지 않습니다. 기능.
함수를 정의하는 문자열; 의미는 다음과 같습니다 언어. 내부 기능 이름, 경로 일 수 있습니다 객체 파일, SQL 쿼리 또는 절차의 텍스트에 언어.
이 형태의as절은입니다 동적으로 연결된 C 언어 함수에 사용됩니다 C 언어 소스 코드의 함수 이름은 동일하지 않습니다. SQL 함수의 이름으로. 문자열OBJ_FILE는 파일의 이름입니다 동적으로로드 가능한 객체를 포함하고link_symbol객체의 링크입니다 기호, 즉 C 언어의 함수 이름 소스 코드.
선택적인 부분을 지정하는 역사적 방법 기능에 대한 정보. 다음 속성 여기에 나타날 수 있습니다 :
동등한엄격한또는null에서 null을 반환합니다 입력
iscachable는 더 이상 사용되지 않습니다 동등한불변; 역 호환성으로 여전히 허용됩니다 이유.
속성 이름은 대소 문자에 민감하지 않습니다.
의 장을 참조하십시오postgresql 프로그래머 가이드확장 주제PostgreSQL더 많은 기능을 통해 외부 기능 작성에 관한 정보.
전체SQLType Syntax IS 입력 인수 및 반환 값을 허용합니다. 그러나 일부 유형 사양의 세부 사항 (예 : 정밀 필드숫자유형)은의 책임입니다 기본 기능 구현 및 조용히 삼켜집니다 (즉, 인식 또는 시행되지 않음)토토 핫 생성명령.
PostgreSQL허용 토토 핫과부하; 즉, 같은 이름이 할 수 있습니다 그들이 가지고있는 한 여러 가지 기능에 사용됩니다. 뚜렷한 인수 유형. 이 시설은주의해서 사용해야합니다 그러나 내부 및 C- 언어 기능의 경우.
2내부기능은 가질 수 없습니다 링크 시간에 오류가 발생하지 않고 동일한 C 이름입니다. 얻기 위해 그 주위에 다른 C 이름을 제공하십시오 (예 : 사용하십시오. C 이름의 일부로 인수 유형), 해당 이름을 지정합니다. as의 as에서함수 생성. 만약에 As 절은 비어 있지 않으며생성 토토 핫함수의 C 이름이 다음과 동일하다고 가정합니다. SQL 이름.
마찬가지로, 다중으로 SQL 함수 이름을 과부하시킬 때 c- 언어 함수, 각각의 c- 언어 인스턴스를 제공한다 뚜렷한 이름을 기능하고 대체 형태의를 사용하십시오.as절의 조항토토 핫 생성구문을 선택하려면 구문 각 과부하 된 SQL 기능의 C- 언어 구현.
반복시함수 만들기전화 동일한 개체 파일을 참조하면 파일은 한 번만로드됩니다. 에게 파일을 내리고 다시로드하고 (아마도 개발 중에) 사용로드명령.
use드롭 함수제거하려면 사용자 정의 기능.
기존 함수의 정의를 업데이트하려면 사용함수 생성 또는 교체. 그것을 주목하십시오 이름이나 인수 유형을 변경할 수 없습니다. 이런 식으로 기능합니다 (시도한 경우, 새로운 것을 만들 것입니다. 뚜렷한 기능). 또한,생성 또는 교체 기능반환 유형을 변경할 수 없습니다. 기존 토토 핫. 그렇게하려면 떨어 뜨리고 다시 창출해야합니다 토토 핫.
함수를 삭제 한 다음 다시 만들면 새 함수는 다음과 같습니다. 오래된 것과 같은 실체가 아닙니다. 기존 규칙을 위반하고 이전 기능을 지칭하는보기, 트리거 등. 사용함수 생성 또는 교체변경하려면 a 기능 정의는 기능.
23162_23222사용법언어에 대한 특권.
기본적으로 토토 핫의 소유자 (제작자) 만 그것을 실행할 권리. 다른 사용자는 부여되어야합니다.execute할 수있는 함수에 대한 특권 사용하십시오.
간단한 SQL 기능을 만들려면 :
함수 생성 1 ()은 정수를 반환합니다 '결과로 1을 선택하십시오.' 언어 SQL; 답변으로 하나를 선택하십시오;답변 -------- 1
다음 예제는 루틴을 호출하여 C 함수를 만듭니다. 사용자가 제작 한 공유 라이브러리에서funcs.so(확장은마다 다를 수 있습니다 플랫폼). 공유 라이브러리 파일은 서버에서 추구됩니다 동적 라이브러리 검색 경로. 이 특정한 일상적인 a 함수의 체크 숫자가있는 경우 숫자를 확인하고 true를 반환합니다. 매개 변수가 정확합니다. 수표에 사용하기위한 것입니다 강제.
기능 작성 EAN_CHECKDIGIT (char, char)는 부울을 반환합니다 'funcs'언어 C; 테이블 제품 생성 ( ID char (8) 기본 키, eanprefix char (8) check (eanprefix ~ '[0-9] 2-[0-9] 5') 참조 Brandname (ean_prefix), eancode char (6) check (eancode ~ '[0-9] 6'), 제약 ean check (ean_checkdigit (eanprefix, eancode))) );
다음 예제는 유형 변환을하는 함수를 만듭니다. 사용자 정의 유형 단지에서 내장 유형 지점까지. 이 기능은 동적으로로드 된 객체에 의해 구현됩니다. C 소스에서 컴파일되었습니다 (우리는 현재 모호한 것을 설명합니다 공유에 절대 파일 이름을 지정하는 대안 객체 파일). 을 위한postgresqlto SQL 기능 인 유형 변환 기능을 자동으로 찾으십시오 리턴 유형과 동일한 이름을 가져야하므로 과부하가 발생합니다. 피할 수 없습니다. 함수 이름은 사용하여 과부하입니다 두 번째 형태의asSQL의 조항 정의:
함수 포인트 생성 (복잡한)은 포인트를 반환합니다 '/home/bernie/pgsql/lib/complex.so', 'complex_to_point'로 언어 C 엄격한;
함수의 C 선언은 다음과 같습니다.
포인트 * complex_to_point (complex * z) 지점 *p; p = (점 *) palloc (sizeof (point)); p- x = z- x; p- y = z- y; 반환 p;
함수가 표시되어 있음에 유의하십시오"엄격한"; 이를 통해 NULL 점검을 건너 뛸 수 있습니다 토토 핫 본문의 입력.
a보안 정의함수
그것을 만든 사용자의 권한으로 실행됩니다.
함수를 오용 할 수 없도록하려면 필요합니다. 을 위한
보안,search_path
를 설정해야합니다
신뢰할 수없는 사용자가 쓸 수있는 스키마를 제외합니다. 이것은 방지합니다
사용 된 객체를 마스킹하는 객체를 만드는 악의적 인 사용자
기능. 이와 관련하여 특히 중요합니다
기본적으로 먼저 검색되는 임시 테이블 스키마
일반적으로 누구나 쓰기 가능합니다. 안전한 배열을 가질 수 있습니다
임시 스키마를 마지막으로 검색하도록함으로써. 이를 위해
쓰다PG_TEMP마지막 항목으로search_path
. 이 기능
안전한 사용법을 보여줍니다 :
함수 생성 check_password (텍스트, 텍스트) 부울을 다시 반환합니다. 통과 된 부울 선언; Old_path 텍스트; 시작하다 - Old Search_Path를 저장; CORRING_SETTING을 인정해야합니다 - 올바른 기능을 호출하도록합니다 Old_path : = PG_CATALOG.CURRENT_SETTING ( ''Search_Path ''); - 안전한 search_path : 신뢰할 수있는 스키마를 설정 한 다음``pg_temp ''. - 이전 값이 복원되도록 IS_LOCAL = TRUE를 설정합니다. - 기능 종료에 도달하기 전에 오류가 발생한 경우. pg_catalog.set_config ( ''search_path '', ''admin, pg_temp '', true); - 우리가 온 안전한 일을하십시오. 전달 된 (PWD = $ 2)를 선택하십시오 PWD에서 여기서 사용자 이름 = $ 1; - 발신자의 search_path를 복원합니다 pg_catalog.set_config ( ''search_path '', Old_path, true); 통과 된 반환; 끝; '언어 PLPGSQL 보안 정의기;
a함수 만들기명령이 정의됩니다 SQL99에서. 그만큼PostgreSQL버전 비슷하지만 완전히 호환되지는 않습니다. 속성은 아닙니다 휴대용, 사용 가능한 언어도 마찬가지입니다.
메이저 토토 사이트 : 문서 : 7.3 : Drop Function, PostgreSQL : 문서 : 7.3 : 젠 토토, PostgreSQL : 문서 : 7.3 :사설 토토 사이트, Revoke, Createlang, PostgreSQL 프로그래머 안내서