CREATE FUNCTION — 새 함수 정의
와이즈 토토 생성 [ 또는 교체 ]이름( [ [argmode] [argname]argtype[ 기본 | =default_expr] [, ...] ] ) [ 반품재입력| 반환 테이블(컬럼_이름열_유형[, ...] ) ] 언어lang_name| 유형에 대한 변환유형_이름[, ... ] | 창 | 불변 | 안정적 | 휘발성 | [ 아님 ] 누출 방지 | NULL 입력 시 호출됨 | NULL 입력 시 NULL 반환 | 엄격 | [ 외부 ] 보안 호출자 | [ 외부 ] 보안 정의자 | 병렬 안전하지 않음 | 제한됨 | 안전함 | 비용execution_cost| 행결과_행| 지원지원_기능| 설정configuration_parameter받는 사람값| =값| 현재부터 | 그대로 '정의' | 그대로 'obj_file', 'link_symbol' |sql_body} ...
함수 생성새 기능을 정의합니다.함수 생성 또는 교체새 기능을 생성하거나 기존 정의를 대체합니다. 함수를 정의하려면 사용자에게 다음이 있어야 합니다.사용언어에 대한 권한입니다.
스키마 이름이 포함되면 함수는 지정된 스키마에 생성됩니다. 그렇지 않으면 현재 스키마에 생성됩니다. 새 함수의 이름은 동일한 스키마에서 동일한 입력 인수 유형을 사용하는 기존 함수 또는 프로시저와 일치하면 안 됩니다. 그러나 다양한 인수 유형의 함수와 프로시저는 이름을 공유할 수 있습니다.오버로딩).
기존 함수의 현재 정의를 바꾸려면 다음을 사용하세요.함수 생성 또는 교체. 이 방법으로 함수의 이름이나 인수 유형을 변경하는 것은 불가능합니다(만약 시도한다면 실제로는 새로운 별개의 함수를 생성하게 될 것입니다). 또한,함수 생성 또는 교체기존 함수의 반환 유형을 변경할 수 없습니다. 그렇게 하려면 함수를 삭제하고 다시 생성해야 합니다. (사용시아웃매개변수, 즉 어떤 유형도 변경할 수 없음을 의미합니다.아웃함수 삭제를 제외한 매개변수.)
언제함수 생성 또는 교체은 기존 함수를 대체하는 데 사용되며 함수의 소유권과 권한은 변경되지 않습니다. 다른 모든 기능 속성에는 명령에 지정되거나 암시된 값이 할당됩니다. 이를 대체하려면 함수를 소유해야 합니다(여기에는 소유 역할의 구성원이 되는 것도 포함됩니다).
함수를 삭제한 후 다시 생성하면 새 함수는 이전 함수와 동일한 개체가 아닙니다. 이전 함수를 참조하는 기존 규칙, 보기, 트리거 등을 삭제해야 합니다. 사용함수 생성 또는 교체함수를 참조하는 객체를 손상시키지 않고 함수 정의를 변경합니다. 또한,함수 변경기존 기능의 대부분의 보조 속성을 변경하는 데 사용할 수 있습니다.
함수를 생성한 사용자가 함수의 소유자가 됩니다.
함수를 생성하려면 다음이 있어야 합니다.사용인수 유형 및 반환 유형에 대한 권한입니다.
참조롤 토토 : 문서 : 17 : 36.3. 사용자 정의 함수작성 함수에 대한 추가 정보를 확인하세요.
이름생성할 함수의 이름(선택적으로 스키마 한정).
argmode인수의 모드:IN, 아웃, INOUT또는VARIADIC. 생략하면 기본값은IN. 만아웃인수는 다음과 같습니다.VARIADIC하나. 또한,밖으로그리고INOUT인수는 다음과 함께 사용할 수 없습니다.반품 테이블표기법.
인수이름인수의 이름. 일부 언어(SQL 및 PL/pgSQL 포함)에서는 함수 본문에 이름을 사용할 수 있습니다. 다른 언어의 경우 입력 인수의 이름은 함수 자체에 관한 한 추가 문서일 뿐입니다. 하지만 가독성을 높이기 위해 함수를 호출할 때 입력 인수 이름을 사용할 수 있습니다(참조범퍼카 토토 : 문서 : 17 : 4.3. 함수 호출). 어떤 경우든 출력 인수의 이름은 결과 행 유형의 열 이름을 정의하므로 중요합니다. (출력 인수의 이름을 생략하면 시스템은 기본 열 이름을 선택합니다.)
argtype함수 인수(선택적으로 스키마 한정)의 데이터 유형(있는 경우). 인수 유형은 기본, 복합 또는 도메인 유형이거나 테이블 열 유형을 참조할 수 있습니다.
구현 언어에 따라 지정이 허용될 수도 있습니다“의사 유형”예:cstring. 의사 유형은 실제 인수 유형이 불완전하게 지정되었거나 일반 SQL 데이터 유형 집합을 벗어났음을 나타냅니다.
열의 유형은 쓰기로 참조됩니다.. 이 기능을 사용하면 테이블 정의 변경과 관계없이 함수를 독립적으로 만드는 데 도움이 될 수 있습니다.테이블_이름.열_이름%TYPE
default_expr매개변수가 지정되지 않은 경우 기본값으로 사용되는 표현식입니다. 표현식은 매개변수의 인수 유형으로 강제될 수 있어야 합니다. 입력만(포함INOUT) 매개변수는 기본값을 가질 수 있습니다. 기본값이 있는 매개변수 뒤에 오는 모든 입력 매개변수에도 기본값이 있어야 합니다.
재입력반환 데이터 유형(선택적으로 스키마 한정). 반환 유형은 기본, 복합 또는 도메인 유형일 수도 있고 테이블 열 유형을 참조할 수도 있습니다. 구현 언어에 따라 지정할 수도 있습니다.“의사 유형”예:cstring. 함수가 값을 반환하지 않아야 하는 경우 다음을 지정하십시오.공허반환 유형으로.
있을 때아웃또는INOUT매개변수,반품절은 생략 가능합니다. 존재하는 경우 출력 매개변수가 암시하는 결과 유형과 일치해야 합니다.기록여러 출력 매개변수가 있거나 단일 출력 매개변수와 동일한 유형이 있는 경우.
그SETOF수정자는 함수가 단일 항목이 아닌 일련의 항목을 반환함을 나타냅니다.
열의 유형은 쓰기로 참조됩니다..테이블_이름.열_이름%TYPE
열_이름다음의 출력 열 이름반품 테이블구문. 이는 사실상 명명된을 선언하는 또 다른 방법입니다.아웃매개변수, 제외반품 테이블또한 암시함SETOF 반환.
열_유형출력 열의 데이터 유형반품 테이블구문.
lang_name함수가 구현된 언어의 이름. 다음과 같을 수 있습니다.sql, c, 내부또는 사용자 정의 절차 언어의 이름(예:plpgsql. 기본값은sqlifsql_body지정되었습니다. 이름을 작은따옴표로 묶는 것은 더 이상 사용되지 않으며 대소문자가 일치해야 합니다.
유형에 대한 변환유형_이름 } [, ... ] }함수 호출을 변환하는 목록이 적용되어야 합니다. SQL 유형과 언어별 데이터 유형 간 변환을 변환합니다. 참조변환 생성. 절차적 언어 구현에는 일반적으로 내장 유형에 대한 지식이 하드코딩되어 있으므로 여기에 나열할 필요가 없습니다. 절차적 언어 구현이 유형을 처리하는 방법을 모르고 변환이 제공되지 않는 경우 데이터 유형 변환을 위한 기본 동작으로 돌아가지만 이는 구현에 따라 다릅니다.
창창함수는 다음과 같습니다.창 와이즈 토토일반 함수가 아닙니다. 이는 현재 C로 작성된 함수에만 유용합니다.창기존 함수 정의를 바꿀 때 속성을 변경할 수 없습니다.
불변안정적휘발성이러한 속성은 쿼리 최적화 프로그램에 함수의 동작에 대해 알려줍니다. 최대 하나의 선택 항목을 지정할 수 있습니다. 이들 중 어느 것도 나타나지 않으면,휘발성기본 가정입니다.
불변함수는 데이터베이스를 수정할 수 없으며 동일한 인수 값이 주어지면 항상 동일한 결과를 반환함을 나타냅니다. 즉, 데이터베이스 조회를 수행하지 않거나 인수 목록에 직접 존재하지 않는 정보를 사용하지 않습니다. 이 옵션이 제공되면 모든 상수 인수를 사용하여 함수를 호출하면 즉시 함수 값으로 대체될 수 있습니다.
안정적함수는 데이터베이스를 수정할 수 없으며 단일 테이블 스캔 내에서 동일한 인수 값에 대해 동일한 결과를 일관되게 반환하지만 해당 결과는 SQL 문 전체에서 변경될 수 있음을 나타냅니다. 이는 데이터베이스 조회, 매개변수 변수(예: 현재 시간대) 등에 따라 결과가 달라지는 함수에 대한 적절한 선택입니다. (다음에는 부적절합니다.이후현재 명령으로 수정된 행을 쿼리하려는 트리거입니다.) 또한현재_타임스탬프함수군은 트랜잭션 내에서 값이 변경되지 않으므로 안정적인 것으로 간주됩니다.
휘발성는 단일 테이블 스캔 내에서도 함수 값이 변경될 수 있으므로 최적화가 이루어질 수 없음을 나타냅니다. 이런 의미에서 휘발성인 데이터베이스 기능은 상대적으로 적습니다. 몇 가지 예는 다음과 같습니다무작위(), currval(), timeofday(). 그러나 호출이 최적화되는 것을 방지하려면 결과가 상당히 예측 가능하더라도 부작용이 있는 모든 함수는 휘발성으로 분류되어야 합니다. 예는 다음과 같습니다setval().
자세한 내용은 참조PostgreSQL : 문서 : 17 : 36.7. 토토 베이 변동성 범주.
누출 방지누출 방지함수에 부작용이 없음을 나타냅니다. 반환 값 외에는 인수에 대한 정보를 공개하지 않습니다. 예를 들어 일부 인수 값에 대해서는 오류 메시지를 표시하지만 다른 인수 값에는 오류 메시지를 표시하지 않거나 오류 메시지에 인수 값을 포함하는 함수는 누출 방지 기능이 없습니다. 이는 시스템이 생성된 뷰에 대해 쿼리를 실행하는 방법에 영향을 미칩니다.security_barrier옵션 또는 행 수준 보안이 활성화된 테이블. 시스템은 데이터의 부주의한 노출을 방지하기 위해 비누출 방지 기능이 포함된 쿼리 자체에서 사용자가 제공한 조건보다 먼저 보안 정책 및 보안 장벽 보기의 조건을 적용합니다. 누출 방지로 표시된 기능 및 연산자는 신뢰할 수 있는 것으로 간주되며 보안 정책 및 보안 장벽 관점의 조건 이전에 실행될 수 있습니다. 또한 인수를 취하지 않거나 보안 장벽 뷰 또는 테이블에서 인수가 전달되지 않은 함수는 보안 조건 이전에 실행되도록 누출 방지로 표시할 필요가 없습니다. 참조보기 만들기그리고PostgreSQL : 문서 : 17 : 39.5. 토토 사이트 및 특권. 이 옵션은 슈퍼유저만 설정할 수 있습니다.
NULL 입력 시 호출됨NULL 입력 시 NULL을 반환합니다.STRICTNULL 입력 시 호출됨(기본값)은 인수 중 일부가 null인 경우 함수가 정상적으로 호출됨을 나타냅니다. 필요한 경우 null 값을 확인하고 적절하게 응답하는 것은 함수 작성자의 책임입니다.
NULL 입력 시 NULL을 반환합니다.또는STRICT함수는 인수 중 하나라도 null일 때마다 항상 null을 반환함을 나타냅니다. 이 매개 변수를 지정하면 null 인수가 있는 경우 함수가 실행되지 않습니다. 대신 null 결과가 자동으로 가정됩니다.
[외부] 보안 호출자[외부] 보안 정의자보안 호출자함수를 호출하는 사용자의 권한으로 함수가 실행됨을 나타냅니다. 그게 기본값이에요.보안 정의자함수를 소유한 사용자의 권한으로 함수가 실행되도록 지정합니다. 작성 방법에 대한 정보는보안 정의자안전하게 작동합니다.아래 참조.
핵심 단어외부은 SQL 적합성을 위해 허용되지만 SQL과 달리 이 기능은 외부 기능뿐만 아니라 모든 기능에 적용되므로 선택 사항입니다.
병렬병렬 안전하지 않음은 함수가 병렬 모드에서 실행될 수 없음을 나타냅니다. SQL 문에 이러한 함수가 있으면 직렬 실행 계획이 강제됩니다. 이것이 기본값입니다.병렬 제한됨함수는 병렬 모드에서 실행될 수 있지만 병렬 그룹 리더 프로세스에서만 실행될 수 있음을 나타냅니다.병렬 안전병렬 작업자 프로세스를 포함하여 함수가 제한 없이 병렬 모드에서 실행되는 것이 안전함을 나타냅니다.
함수는 데이터베이스 상태를 수정하고, 트랜잭션 상태를 변경하고(오류 복구를 위한 하위 트랜잭션을 사용하는 경우 제외), 액세스 시퀀스(예: 호출을 통해)를 변경하는 경우 병렬 안전하지 않음으로 라벨을 지정해야 합니다.곡선) 또는 설정을 지속적으로 변경합니다. 임시 테이블, 클라이언트 연결 상태, 커서, 준비된 명령문 또는 시스템이 병렬 모드에서 동기화할 수 없는 기타 백엔드 로컬 상태에 액세스하는 경우 병렬 제한 라벨을 지정해야 합니다(예:세트 시드다른 프로세스에서 변경한 내용은 리더에 반영되지 않으므로 그룹 리더 외에는 실행할 수 없습니다.) 일반적으로 함수가 제한되거나 안전하지 않을 때 안전한 것으로 레이블이 지정되거나 실제로 안전하지 않을 때 제한됨으로 레이블이 지정되면 병렬 쿼리에 사용될 때 오류가 발생하거나 잘못된 응답이 생성될 수 있습니다. C 언어 함수는 이론적으로 레이블이 잘못 지정되면 완전히 정의되지 않은 동작을 보일 수 있습니다. 시스템이 임의의 C 코드로부터 자신을 보호할 수 있는 방법이 없기 때문입니다. 그러나 대부분의 경우 결과는 다른 함수보다 나쁘지 않을 것입니다. 의심스러운 경우 함수에 다음과 같이 라벨을 지정해야 합니다.안전하지 않음, 이것이 기본값입니다.
비용 실행_비용함수에 대한 예상 실행 비용을 단위로 제공하는 양수cpu_operator_cost. 함수가 집합을 반환하는 경우 이는 반환된 행당 비용입니다. 비용이 지정되지 않은 경우 C 언어 및 내부 기능의 경우 1단위로 간주되고 기타 모든 언어의 기능은 100단위로 간주됩니다. 값이 클수록 플래너는 필요한 것보다 더 자주 함수를 평가하지 않으려고 합니다.
행 결과_행플래너가 함수가 반환할 것으로 예상하는 예상 행 수를 제공하는 양수입니다. 이는 함수가 집합을 반환하도록 선언된 경우에만 허용됩니다. 기본 가정은 1000행입니다.
지원 지원_기능a의 이름(선택적으로 스키마 한정)플래너 지원 기능이 기능에 사용합니다. 참조PostgreSQL : 문서 : 17 : 36.11. 토토 베이 최적화 정보31141_31198
configuration_parameter값그SET절은 함수가 시작될 때 지정된 구성 매개변수가 지정된 값으로 설정되고 함수가 종료될 때 이전 값으로 복원되도록 합니다.현재부터 설정다음의 경우 현재 매개변수 값을 저장합니다.함수 생성함수 입력시 적용되는 값으로 실행됩니다.
만약에SET절이 함수에 첨부되면 a의 효과로컬 설정32006_32199SET명령(없음로컬)는를 재정의합니다.SET절, 이전과 마찬가지로로컬 설정명령: 현재 트랜잭션이 롤백되지 않는 한 이러한 명령의 효과는 함수 종료 후에도 지속됩니다.
참조SET그리고윈 토토 : 문서 : 17 : 19 장 서버 구성허용된 매개변수 이름 및 값에 대한 자세한 내용을 확인하세요.
정의함수를 정의하는 문자열 상수; 의미는 언어에 따라 다릅니다. 내부 함수 이름, 개체 파일 경로, SQL 명령 또는 절차적 언어의 텍스트일 수 있습니다.
달러 인용을 사용하는 것이 종종 도움이 됩니다(참조섹션 4.1.2.4) 일반적인 작은따옴표 구문 대신 함수 정의 문자열을 작성합니다. 달러 따옴표가 없으면 함수 정의의 작은 따옴표나 백슬래시를 두 배로 늘려 이스케이프해야 합니다.
obj_file, link_symbol이 형태의AS절은 C 언어 소스 코드의 함수 이름이 SQL 함수의 이름과 동일하지 않을 때 동적으로 로드 가능한 C 언어 함수에 사용됩니다. 문자열obj_file은 컴파일된 C 함수를 포함하는 공유 라이브러리 파일의 이름이며 다음과 같이 해석됩니다.로드명령. 문자열link_symbol은 함수의 링크 기호, 즉 C 언어 소스 코드의 함수 이름입니다. 링크 기호가 생략되면 정의 중인 SQL 함수 이름과 동일한 것으로 간주됩니다. 모든 함수의 C 이름은 달라야 하므로 오버로드된 C 함수에 다른 C 이름을 지정해야 합니다(예: 인수 유형을 C 이름의 일부로 사용).
반복되는 경우함수 생성호출은 동일한 개체 파일을 참조하며, 파일은 세션당 한 번만 로드됩니다. 파일을 언로드하고 다시 로드하려면(아마도 개발 중에) 새 세션을 시작하세요.
sql_bodya의 본문언어 SQL함수. 이는 단일 문일 수 있습니다.
반환표현
또는 블록
원자적 시작성명;성명; ...성명; 끝
이것은 함수 본문의 텍스트를 문자열 상수로 작성하는 것과 유사합니다(참조정의위), 그러나 몇 가지 차이점이 있습니다. 이 양식은 다음에서만 작동합니다.언어 SQL, 문자열 상수 형식은 모든 언어에서 작동합니다. 이 형식은 함수 정의 시 구문 분석되고, 문자열 상수 형식은 실행 시 구문 분석됩니다. 따라서 이 형식은 함수 정의 시 확인할 수 없는 다형성 인수 유형 및 기타 구성을 지원할 수 없습니다. 이 양식은 함수 본문에 사용된 함수와 객체 간의 종속성을 추적하므로삭제 ... 캐스케이드은 올바르게 작동하지만 문자열 리터럴을 사용하는 형식은 매달린 함수를 남길 수 있습니다. 마지막으로 이 형식은 SQL 표준 및 기타 SQL 구현과 더 잘 호환됩니다.
PostgreSQL와이즈 토토 허용오버로딩; 즉, 서로 다른 입력 인수 유형이 있는 한 여러 다른 함수에 동일한 이름을 사용할 수 있습니다. 사용 여부에 관계없이 이 기능은 일부 사용자가 다른 사용자를 신뢰하지 않는 데이터베이스에서 함수를 호출할 때 보안 예방 조치를 수반합니다. 참조스포츠 토토 결과 42 |_1 |04.
두 함수는 이름이 동일하면 동일한 것으로 간주되며입력인수 유형, 모두 무시아웃매개변수. 따라서 예를 들어 이러한 선언은 충돌합니다.
함수 생성 foo(int) ... 함수 만들기 foo(int, out text) ...
다른 인수 유형 목록을 가진 함수는 생성 시 충돌하는 것으로 간주되지 않지만 기본값이 제공되면 사용 시 충돌할 수 있습니다. 예를 들어 다음을 고려하세요.
함수 생성 foo(int) ... 함수 생성 foo(int, int 기본값 42) ...
전화foo(10)어떤 함수를 호출해야 하는지에 대한 모호함으로 인해 실패합니다.
전체SQL유형 구문은 함수의 인수 및 반환 값을 선언하는 데 허용됩니다. 그러나 괄호로 묶인 유형 수정자(예: 유형의 정밀도 필드숫자)은에 의해 삭제됩니다.함수 생성. 따라서 예를 들면Foo 함수 생성(varchar(10)) ...정확히 동일Foo(varchar) 함수 생성 ....
기존 기능을 다음으로 대체할 때함수 생성 또는 교체, 매개변수 이름 변경에 제한이 있습니다. 입력 매개변수에 이미 할당된 이름은 변경할 수 없습니다. 단, 이전에 입력 매개변수가 없었던 매개변수에 이름을 추가할 수는 있습니다. 출력 매개변수가 두 개 이상인 경우 출력 매개변수의 이름을 변경할 수 없습니다. 이렇게 하면 함수 결과를 설명하는 익명 복합 유형의 열 이름이 변경되기 때문입니다. 이러한 제한은 함수의 기존 호출이 교체될 때 작동이 중지되지 않도록 하기 위해 만들어졌습니다.
함수가 선언된 경우STRICT와VARIADIC인수, 엄격성 검사는 가변 배열을 테스트합니다.전체적으로은 null이 아닙니다. 배열에 null 요소가 있는 경우에도 함수가 호출됩니다.
SQL 함수를 사용하여 두 개의 정수를 추가합니다:
CREATE FUNCTION add(정수, 정수) RETURNS 정수
AS '$1 + $2 선택;'
언어 SQL
불변
NULL 입력 시 NULL을 반환합니다.
인수 이름과 인용되지 않은 본문을 사용하여 더욱 SQL을 준수하는 스타일로 작성된 동일한 함수:
CREATE FUNCTION add(a 정수, b 정수) RETURNS 정수
언어 SQL
불변
NULL 입력 시 NULL을 반환합니다.
반환 a + b;
인수 이름을 사용하여 정수를 증가시킵니다.PL/pgSQL:
CREATE OR REPLACE FUNCTION 증분(i 정수) $$로 정수를 반환합니다.
시작
RETURN i + 1;
끝;
$$ 언어 plpgsql;
여러 출력 매개변수가 포함된 레코드를 반환합니다:
CREATE FUNCTION dup(in int, out f1 int, out f2 텍스트)
AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
언어 SQL;
SELECT * FROM dup(42);
명시적으로 이름이 지정된 복합 유형을 사용하면 동일한 작업을 더 장황하게 수행할 수 있습니다.
CREATE TYPE dup_result AS(f1 int, f2 텍스트);
함수 생성 dup(int)는 dup_result를 반환합니다.
AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
언어 SQL;
SELECT * FROM dup(42);
여러 열을 반환하는 또 다른 방법은 다음을 사용하는 것입니다.표와이즈 토토:
함수 생성 dup(int) 반환 테이블(f1 int, f2 text)
AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
언어 SQL;
SELECT * FROM dup(42);
그러나 a표함수는 실제로 다음을 반환한다는 점에서 이전 예제와 다릅니다.설정단지 하나의 레코드가 아닌 여러 개의 레코드.
보안 정의자안전하게 와이즈 토토함왜냐면 a보안 정의자함수는 그것을 소유한 사용자의 권한으로 실행되므로 함수가 오용되지 않도록 주의가 필요합니다. 보안을 위해,검색_경로신뢰할 수 없는 사용자가 쓸 수 있는 모든 스키마를 제외하도록 설정해야 합니다. 이는 악의적인 사용자가 함수에서 사용하도록 의도된 객체를 가리는 객체(예: 테이블, 함수 및 연산자)를 생성하는 것을 방지합니다. 이와 관련하여 특히 중요한 것은 기본적으로 먼저 검색되고 일반적으로 누구나 쓸 수 있는 임시 테이블 스키마입니다. 임시 스키마를 마지막에 검색하도록 하여 안전한 배열을 얻을 수 있습니다. 이렇게 하려면 다음을 작성하세요.pg_temp의 마지막 항목으로검색_경로. 이 함수는 안전한 사용법을 보여줍니다.
CREATE FUNCTION check_password(TEXT 이름 취소, TEXT 전달)
부울을 $$로 반환합니다.
DECLARE가 BOOLEAN을 통과했습니다.
시작
SELECT (pwd = $2) INTO가 전달되었습니다.
비밀번호에서
사용자 이름 = $1;
반환이 통과되었습니다.
끝;
$$ 언어 plpgsql
보안 정의자
-- 보안 검색_경로(신뢰할 수 있는 스키마, 'pg_temp')를 설정합니다.
SET search_path = 관리자, pg_temp;
이 함수의 목적은 테이블에 접근하는 것입니다.admin.pwds. 하지만SET절 또는 aSET만 언급하는 절관리자, 이름이 지정된 임시 테이블을 생성하여 함수를 전복할 수 있습니다.비밀번호.
보안 정의자 기능이 역할을 생성하려고 하며 수퍼유저가 아닌 사용자로 실행 중인 경우,createrole_self_grant또한 다음을 사용하여 알려진 값으로 설정되어야 합니다.SET절.
또 다른 명심해야 할 점은 기본적으로 실행 권한이 다음에 부여된다는 것입니다.공개새로 생성된 함수의 경우(참조PostgreSQL : 문서 : 17 : 5.8. 사설 토토 사이트자세한 정보는). 보안 정의자 기능의 사용을 일부 사용자에게만 제한하고 싶은 경우가 많습니다. 그렇게 하려면 기본값을 취소해야 합니다.공개권한을 부여한 다음 선택적으로 실행 권한을 부여합니다. 모든 사람이 새 기능에 액세스할 수 있는 창을 피하려면 해당 기능을 만들고 단일 트랜잭션 내에서 권한을 설정하십시오. 예를 들면:
시작; CREATE FUNCTION check_password(TEXT 이름 변경, TEXT 전달) ... 보안 정의자; PUBLIC에서 함수의 모든 항목을 취소합니다. check_password(TEXT 이름 변경, TEXT 전달); 관리자에게 함수에 대한 실행 권한을 부여합니다. check_password(TEXT 이름 바꾸기, TEXT 전달); 커밋;
A 함수 생성명령은 SQL 표준에 정의되어 있습니다.PostgreSQL구현은 호환되는 방식으로 사용될 수 있지만 확장이 많습니다. 반대로, SQL 표준은 구현되지 않은 여러 선택적 기능을 지정합니다.PostgreSQL.
다음은 중요한 호환성 문제입니다:
또는 교체PostgreSQL 확장 프로그램입니다.
다른 데이터베이스 시스템과의 호환성을 위해,argmode앞이나 뒤에 쓸 수 있습니다.argname. 하지만 첫 번째 방법만 표준을 준수합니다.
매개변수 기본값의 경우 SQL 표준은 다음과 같은 구문만 지정합니다.기본값키워드. 의 구문=T-SQL 및 Firebird에서 사용됩니다.
그SETOF수정자는 PostgreSQL 확장입니다.
만SQL언어로 표준화되어 있습니다.
다음을 제외한 다른 모든 속성NULL 입력 시 호출됨그리고NULL 입력 시 NULL을 반환합니다.표준화되지 않았습니다.
의 몸을 위해언어 SQL함수, SQL 표준은 다음만 지정합니다.sql_body양식.
간단함언어 SQL함수는 표준을 준수하고 다른 구현으로 이식 가능한 방식으로 작성될 수 있습니다. 고급 기능, 최적화 속성 또는 기타 언어를 사용하는 더 복잡한 기능은 반드시 PostgreSQL에만 중요한 방식으로 적용됩니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.