이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

50.2. 롤 토토 흐름

이 섹션에서는 각 롤 토토 유형의 롤 토토 흐름과 의미를 설명합니다. (각 롤 토토의 정확한 표현에 대한 세부 사항은에 나타납니다.PostgreSQL : 문서 : 9.5 : 메이저 토토 사이트 형식.) 연결 상태에 따라 몇 가지 다른 하위 보호콜이 있습니다 : 시작, 쿼리, 기능 호출,COPY및 종료. 신생 기간 후 언제든지 발생할 수있는 비동기 운영 (알림 응답 및 명령 취소 포함)에 대한 특별 조항도 있습니다.

50.2.1. 스타트 업

세션을 시작하려면 프론트 엔드는 서버에 대한 연결을 엽니 다. 이 롤 토토에는 사용자의 이름과 사용자가 연결하려는 데이터베이스의 이름이 포함됩니다.pg_hba.conf) 연결이 잠정적으로 허용되는지 여부와 추가 인증이 필요한 경우 (있는 경우)

서버는 적절한 인증 요청 롤 토토를 보냅니다. 여기서 프론트 엔드는 적절한 인증 응답 롤 토토 (예 : 비밀번호)로 응답해야합니다. GSSAPI 및 SSPI를 제외한 모든 인증 방법의 경우 최대 하나의 요청과 하나의 응답이 있습니다.

인증주기는 서버가 연결 시도 (ErrorResponse)를 거부하거나 authenticationok을 보내는 서버로 끝납니다.

이 단계에서 서버의 가능한 메시지는 다음과 같습니다.

ErrorResponse

연결 시도가 거부되었습니다. 그런 다음 서버가 즉시 연결을 닫습니다.

Authenticationok

인증 교환이 성공적으로 완료되었습니다.

AuthenticationKerberoSV5

프론트 엔드는 이제 서버와 함께 Kerberos V5 인증 대화 상자 (여기에 설명되지 않음)에 참여해야합니다. 이것이 성공하면 서버는 AuthenticationOk으로 응답합니다. 그렇지 않으면 ErrorResponse로 응답합니다.

AuthenticationClearTextPassword

Frontend는 이제 암호가 포함 된 암호를 Clear-Text 양식으로 보내야합니다. 이것이 올바른 암호 인 경우 서버는 AuthenticationOk으로 응답합니다. 그렇지 않으면 ErrorResponse로 응답합니다.

AuthenticationMd5password

Frontend는 이제 MD5를 통해 암호화 된 암호 (사용자 이름 포함)가 포함 된 암호 메신저를 보내고 AuthenticationMd5Password 메시지에 지정된 4 바이트 임의의 소금을 사용하여 다시 암호화해야합니다. 이것이 올바른 암호 인 경우 서버는 AuthenticationOk으로 응답합니다. 그렇지 않으면 ErrorResponse로 응답합니다.concat ( 'md5', md5 (concat (md5 (concat (concat (concat), username)), random-salt)). (명심하십시오md5 ()함수는 결과를 육각 문자열로 반환합니다.)

authenticationscmcredential

이 응답은 SCM 자격 증명 메시지를 지원하는 플랫폼의 로컬 UNIX- 도메인 연결에만 가능합니다. 프론트 엔드는 SCM 자격 증명 메시지를 발행 한 다음 단일 데이터 바이트를 보내야합니다.

AuthenticationGSS

프론트 엔드는 이제 GSSAPI 협상을 시작해야합니다. 프론트 엔드는 이에 대한 응답으로 GSSAPI 데이터 스트림의 첫 번째 부분과 함께 PasswordMessage를 보냅니다.

AuthenticationsSpi

프론트 엔드는 이제 SSPI 협상을 시작해야합니다. 프론트 엔드는 이에 대한 응답으로 SSPI 데이터 스트림의 첫 번째 부분과 함께 PasswordMessage를 보냅니다.

AuthenticationgsScontinue

이 메시지에는 GSSAPI 또는 SSPI 협상의 이전 단계 (AuthenticationGSS, AuthenticationSSPI 또는 이전 AuthenticationGsScontinue)의 응답 데이터가 포함되어 있습니다. 이 메시지의 GSSAPI 또는 SSPI 데이터가 인증을 완료하기 위해 더 많은 데이터가 필요하다는 것을 나타내는 경우, 프론트 엔드는 해당 데이터를 다른 PasswordMessage로 보내야합니다.

협상 론적 변환

서버는 클라이언트가 요청한 마이너 프로토콜 버전을 지원하지 않지만 이전 버전의 프로토콜을 지원합니다. 이 메시지는 지원되는 최고 마이너 버전을 나타냅니다._PQ_.) 시작 패킷에서. 이 롤 토토에 이어 오류 응답 또는 인증의 성공 또는 실패를 나타내는 롤 토토가 이어집니다.

프론트 엔드가 서버에서 요청한 인증 메소드를 지원하지 않으면 즉시 연결을 닫아야합니다.

Authenticationok을받은 후 프론트 엔드는 서버에서 추가 메시지를 기다려야합니다. 이 단계에서 백엔드 프로세스가 시작되고 있으며 프론트 엔드는 관심있는 방관자 일뿐입니다.

이 단계에서 백엔드는 시작 롤 토토에 제공된 추가 런타임 매개 변수 설정을 적용하려고 시도합니다. 성공하면이 값은 세션 기본값이됩니다.

이 단계의 백엔드의 가능한 메시지는 다음과 같습니다.

BackendKeyData

이 롤 토토는 나중에 취소 요청을 발행하려면 프론트 엔드가 저장 해야하는 비밀 키 데이터를 제공합니다. 프론트 엔드는이 롤 토토에 응답해서는 안되지만 readyforquery 롤 토토를 계속 듣어야합니다.

Parameterstatus

이 메시지는 전면 엔드에와 같은 백엔드 매개 변수의 현재 (초기) 설정에 대해 알려줍니다.client_encoding또는Datestyle. 프론트 엔드는이 롤 토토를 무시하거나 향후 용도로 설정을 기록 할 수 있습니다.섹션 50.2.6자세한 내용은. 프론트 엔드는이 롤 토토에 응답해서는 안되지만 readyforquery 롤 토토를 계속 듣어야합니다.

ReadyForquery

스타트 업이 완료되었습니다. 프론트 엔드는 이제 명령을 발행 할 수 있습니다.

ErrorResponse

시작이 실패했습니다. 이 롤 토토를 전한 후 연결이 닫힙니다.

NoticerEsponse

경고 메시지가 발행되었습니다. 프론트 엔드는 메시지를 표시해야하지만 ReadyForquery 또는 ErrorResponse를 계속 듣습니다.

ReadyForquery 메시지는 각 명령주기 후에 백엔드가 발행하는 것과 동일합니다. 프론트 엔드의 코딩 요구에 따라 ReadyForery를 명령주기를 시작하는 것으로 간주하거나 ReadyForquery가 시작 단계 및 각 후속 명령주기를 종료하는 것으로 간주하는 것이 합리적입니다..

50.2.2. 간단한 쿼리

간단한 쿼리주기는 프론트 엔드에 의해 쿼리 메시지를 백엔드로 전송하여 시작됩니다. 이 메시지에는 텍스트 문자열로 표현 된 SQL 명령 (또는 명령)이 포함됩니다.

백엔드의 가능한 응답 메시지는 다음과 같습니다.

CommandComplete

정상적으로 완료된 SQL 명령.

CopyInResponse

백엔드는 프론트 엔드에서 테이블로 데이터를 복사 할 준비가되었습니다. 보다섹션 50.2.5.

CopyOUtResponse

백엔드는 테이블에서 프론트 엔드로 데이터를 복사 할 준비가되었습니다. 보다섹션 50.2.5.

RowDescription

A에 대한 응답으로 행이 반환 될 것임을 나타냅니다select, fetch등 쿼리. 이 롤 토토의 내용은 행의 열 레이아웃을 설명합니다.

Datarow

a에 의해 반환 된 행 세트 중 하나입니다.select, fetch등 쿼리.

emptyQueryResponse

빈 쿼리 문자열이 인식되었습니다.

ErrorResponse

오류가 발생했습니다.

ReadyForquery

쿼리 문자열의 처리가 완료되었습니다. 쿼리 문자열에 여러 SQL 명령이 포함될 수 있으므로 별도의 롤 토토가 표시됩니다.

NoticerEsponse

쿼리와 관련하여 경고 롤 토토가 발행되었습니다. 통지는 다른 응답에 추가됩니다. 즉, 백엔드는 명령을 계속 처리합니다..

A에 대한 응답selectQuery (또는 쿼리 (또는과 같은 행을 반환하는 기타 쿼리설명또는show) 일반적으로 rowdescription, Zero ordor thataRow 메시지, 그리고 CommandComplete로 구성됩니다.COPYor on the frontend에서 설명한대로 특수 프로토콜을 호출합니다섹션 50.2.5. 다른 모든 쿼리 유형은 일반적으로 CommandComplete 메시지 만 생성합니다.

쿼리 문자열에는 여러 쿼리 (세미콜론으로 구분)가 포함될 수 있으므로 백엔드가 쿼리 문자열을 처리하기 전에 이러한 응답 시퀀스가 ​​몇 개있을 수 있습니다. 전체 문자열이 처리되고 백엔드가 새 쿼리 문자열을 수락 할 준비가되었을 때 ReadyForquery가 발행됩니다.

완전히 비어있는 (공백 이외의 내용 없음) 쿼리 문자열이 수신되면 응답은 emptyQueryResponse와 ReadyForquery가 이어집니다..

오류가 발생하면 ErrorResponse가 발행 한 다음 ReadyForquery가 이어집니다. 쿼리 문자열의 모든 추가 처리는 ErrorResponse에 의해 중단됩니다 (더 많은 쿼리가 남아 있더라도).

간단한 쿼리 모드에서, 검색된 값의 형식은 항상 텍스트입니다.fetchBINAGE옵션. 이 경우 검색된 값은 이진 형식입니다.

다른 유형의 메시지가 예상 될 때마다 ErrorResponse 및 주석 반응 메시지를 수락하도록 프론트 엔드를 준비해야합니다. 참조 참조섹션 50.2.6외부 이벤트로 인해 백엔드가 생성 할 수있는 롤 토토에 관해

권장되는 연습은 정확한 롤 토토 시퀀스에 대한 가정에서 배선하는 대신 모든 롤 토토 유형을 수락 할 수있는 상태 메쇄 스타일로 Frontends를 코딩하는 것입니다..

50.2.3. 확장 쿼리

확장 쿼리 프로토콜은 위에서 설명한 간단한 쿼리 프로토콜을 여러 단계로 나눕니다. 효율성을 향상시키기 위해 준비 단계의 결과를 여러 번 재사용 할 수 있습니다.

확장 프로토콜에서 프론트 엔드는 먼저 구문 분석 메시지를 보냅니다. 여기에는 텍스트 쿼리 문자열, 선택적으로 매개 변수 자리 표시 자의 데이터 유형 및 대상 준비 상태 개체의 이름이 포함 된 일부 정보 (빈 문자열이 표시되지 않은 준비 문을 선택 함). 응답은 parsecomplete 또는 ErrorResponse입니다.

참고 :매개 변수 데이터 유형을 0으로 설정하거나 매개 변수 유형 OID 배열을 매개 변수 기호 수보다 짧게 만들어 지정되지 않도록 남을 수 있습니다 ($n14338_14433void(즉,의 외침voidpseudotype). 이는 매개 변수 기호가 실제로 매개 변수를 벗어난 함수 매개 변수에 사용할 수 있도록하기위한 것입니다.void매개 변수를 사용할 수 있지만 이러한 매개 변수 기호가 함수의 매개 변수 목록에 나타나면 효과적으로 무시됩니다. 예를 들어,와 같은 함수 호출foo ($ 1, $ 2, $ 3, $ 4)If 2 인치 및 2 개의 인수와 함수와 일치 할 수 있습니다.$3and$4유형이있는 것으로 지정void.

참고 :구문 분석 롤 토토에 포함 된 쿼리 문자열에는 둘 이상의 SQL 문을 포함 할 수 없습니다. 그렇지 않으면 구문 오류 가보고됩니다.

성공적으로 작성된 경우, 명명 된 준비된 개체는 명시 적으로 파괴되지 않는 한 현재 세션이 끝날 때까지 지속됩니다. 이름이없는 준비된 진술은 대상이 발행 될 때 이름이없는 진술을 지정하는 다음 구문 분석 명세서까지 지속됩니다.준비andexecute.

준비된 명령문이 있으면 바인드 메시지를 사용하여 실행을 준비 할 수 있습니다. 바인드 메시지는 소스 준비 문의 이름 (빈 문자열이 이름이없는 준비 문을 나타냅니다), 대상 포털의 이름 (빈 문자열이 이름이없는 포털을 나타냄) 및 준비된 문에 존재하는 매개 변수 자리 표시 자에게 사용할 값을 제공합니다.void구문 분석 메시지의 매개 변수는 바인드 메시지에서 널 값을 전달합니다.) 바인드 쿼리에서 반환 된 모든 데이터에 대해 사용할 형식을 지정합니다. 형식은 전체적으로 또는 콜로얼 당 지정할 수 있습니다.

참고 :텍스트와 이진 출력 사이의 선택은 관련된 SQL 명령에 관계없이 BAND에 주어진 형식 코드에 의해 결정됩니다. 그만큼BINAGE확장 쿼리 프로토콜을 사용할 때 커서 선언의 속성이 관련이 없습니다.

쿼리 계획은 일반적으로 바인드 메시지가 처리 될 때 발생합니다. 준비된 명령문에 매개 변수가 없거나 반복적으로 실행되는 경우 서버는 생성 된 계획을 저장하고 동일한 준비 문의 후속 바인드 메시지 중에 재사용 할 수 있습니다.

성공적으로 생성되면 명명 된 포털 개체는 명시 적으로 파괴되지 않는 한 현재 트랜잭션의 끝까지 지속됩니다. 거래가 끝날 때 명명되지 않은 포털이 파괴되거나, 이름이없는 포털을 대상으로 지정하는 다음 바인드 명령문이 즉시 파괴됩니다.커서 선언andfetch.

포털이 존재하면 실행 롤 토토를 사용하여 실행할 수 있습니다. Execute Message는 포털 이름 (빈 문자열이 이름이없는 포털을 나타냄)과 최대 결과 행 카운트를 지정합니다 (제로 의미"모든 행을 가져와"). 결과 행 카운트는 행 세트를 반환하는 명령을 포함하는 포털에만 의미가 있습니다.

Execute가 포털 실행을 완료하기 전에 종료되면 (0이 아닌 결과 열 수에 도달하기 때문에) PortalSuspended 롤 토토를 보냅니다. 이 롤 토토의 출현은 작업을 완료하기 위해 동일한 포털에 대해 다른 실행을 발행해야한다는 프론트 엔드를 알려줍니다.

각 시리즈의 확장 쿼리 메시지를 완료하면 프론트 엔드는 동기화 메시지를 발행해야합니다. 이 매개 변수가없는 메시지는 a 내부에 있지 않으면 백엔드가 현재 트랜잭션을 닫게합니다.시작/커밋트랜잭션 블록 ("Close"오류가없는 경우 커밋하거나 오류가 발생하는 경우 롤백을 의미합니다). 그런 다음 ReadyForquery 응답이 발행됩니다.whileProcessing Sync - 각 동기에 대해 하나의 readyforquery 만 전송되도록합니다.)

참고 :동기화는 트랜잭션 블록이 열리지 않습니다시작폐쇄 될 예정입니다. ReadyForquery 메시지에는 거래 상태 정보가 포함되어 있으므로이 상황을 감지 할 수 있습니다.

이러한 기본 필수 작업 외에도 확장 쿼리 프로토콜과 함께 사용할 수있는 몇 가지 선택적 작업이 있습니다.

설명 메시지 (포털 변형)는 기존 포털의 이름 (또는 이름없는 포털의 빈 문자열)의 이름을 지정합니다. 응답은 포털을 실행하여 반환 될 행을 설명하는 RowDescription 메시지입니다.

묘사 메시지 (Statement variant)는 기존 준비 된 명령문의 이름 (또는 이름이없는 준비된 명령문의 빈 문자열)의 이름을 지정합니다. 응답은 명령문에 필요한 매개 변수를 설명하는 매개 변수 설명 메시지이며, 성명서가 실행될 때 반환 될 행을 설명하는 행 드 스용 스크립트 메시지 (또는 명령문이 행을 반환하지 않으면 NODATA 메시지)가 이어집니다.

팁 :대부분의 시나리오에서 프론트 엔드는 실행을 발행하기 전에 하나 또는 다른 변형을 발행하여 결과를 해석하는 방법을 알고 있는지 확인해야합니다..

닫기 메시지는 기존 준비 된 명령문 또는 포털을 닫고 리소스를 출시합니다. 존재하지 않는 진술 또는 포털 이름에 대해 가까이 발행하는 것은 오류가 아닙니다.

플러시 롤 토토로 인해 특정 출력이 생성되지 않지만 백엔드가 출력 버퍼에 계류중인 데이터를 전달하도록 강요합니다. 프론트 엔드가 더 많은 명령을 발행하기 전에 해당 명령의 결과를 검사하려는 경우 동기화를 제외한 확장 쿼리 명령 후에 플러시를 보내야합니다.

참고 :간단한 쿼리 메시지는 시리즈 구문 분석, 바인드, 포털 설명, 실행, 닫기, 동기화, 이름이없는 준비 명령문 및 포털 개체 및 매개 변수가 없음과 거의 같습니다. 한 가지 차이점은 쿼리 문자열에서 여러 SQL 문을 허용하여 각각의 연속적으로 BAND/DERFING/EXECUTE 시퀀스를 자동으로 수행한다는 것입니다.

50.2.4. 함수 호출

함수 호출 서브 프로토콜을 사용하면 클라이언트가 데이터베이스에 존재하는 모든 함수의 직접 호출을 요청할 수 있습니다PG_PROC시스템 카탈로그. 클라이언트는 기능에 대한 권한을 실행해야합니다.

참고 :함수 호출 서브 프로토콜은 새로운 코드에서 가장 잘 피할 수있는 레거시 기능입니다. 비슷한 결과를 얻을 수있는 준비된 진술을 설정함으로써 유사한 결과를 얻을 수 있습니다.선택 함수 ($ 1, ...). 그런 다음 함수 호출 사이클을 바인드/실행으로 대체 할 수 있습니다.

함수 통화주기는 Frontend에 의해 백엔드로 기능을 보내는 메시지를 보냅니다. 그런 다음 백엔드는 함수 호출 결과에 따라 하나 이상의 응답 메시지와 최종적으로 응답 메시지를 보냅니다.

백엔드의 가능한 응답 메시지는 다음과 같습니다.

ErrorResponse

오류가 발생했습니다.

functionCallResponse

함수 호출이 완료되어 롤 토토에 주어진 결과를 반환했습니다. (함수 호출 프로토콜은 행 유형이나 결과 세트가 아닌 단일 스칼라 결과 만 처리 할 수 ​​있습니다.)

ReadyForquery

함수 호출 처리가 완료되었습니다. Processing이 성공적으로 종료 되든 오류가 있든 ReadyForquery가 항상 전송됩니다.

NoticerEsponse

함수 호출과 관련하여 경고 롤 토토가 발행되었습니다. 통지는 다른 응답에 추가됩니다. 즉, 백엔드는 명령을 계속 처리합니다..

50.2.5. 복사 작업

theCOPY명령은 서버로 또는 서버로 고속 벌크 데이터 전송을 허용합니다. 복사 및 카피 아웃 작업 각각 연결을 고유 한 서브 프로콜로 전환하여 작업이 완료 될 때까지 지속됩니다.

백엔드가 a를 실행할 때 카피인 모드 (서버로의 데이터 전송)가 시작됩니다.stdin에서 복사SQL 문. 백엔드는 CopyInResponse 메시지를 프론트 엔드에 보냅니다.COPY오류로 실패하는 SQL 문). 그런 다음 백엔드는 이전에 있었던 명령 처리 모드로 되돌아갑니다COPY시작하여 간단하거나 확장 쿼리 프로토콜이 될 것입니다. 다음으로 CommandComplete (성공한 경우) 또는 ErrorResponse (그렇지 않은 경우)를 보냅니다.

카피 인 모드에서 백엔드-검출 된 오류가 발생한 경우 (CopyFail 메시지 수신 포함) 백엔드는 ErrorResponse 메시지를 발행합니다. 인 경우COPY명령은 확장 쿼리 메시지를 통해 발행되었으며, 백엔드는 이제 동기화 메시지가 수신 될 때까지 프론트 엔드 메시지를 폐기하면 ReadyForquery를 발행하고 정상 처리로 돌아갑니다. 인 경우COPY명령은 간단한 쿼리 메시지로 발행되었으며, 해당 메시지의 나머지는 폐기되고 ReadyForquery가 발행됩니다. 두 경우 모두, 프론트 엔드에서 발행 한 후속 카피 사다, 카피 도네 또는 카피 피어 메시지가 단순히 삭제됩니다.

백엔드는 카피인 모드에서 수신 된 플러시 및 동기화 메시지를 무시합니다. 다른 비 코피 메시지 ​​유형의 수신은 위에서 설명한대로 사본 인 상태를 중단시키는 오류를 만듭니다.stdin에서 복사.)

복사 모드 (서버에서 데이터 전송)가 시작될 때 시작됩니다stdout에 복사SQL 문. 백엔드는 CopyOUtresponse 메시지를 프론트 엔드에 보낸 다음 0 개 이상의 CopyData 메시지 (항상 행당 1 행)를 보낸 다음 Copydone을 보냅니다.COPY시작하여 CommandComplete를 보냅니다. 프론트 엔드는 전송을 중단 할 수는 없지만 (연결을 닫거나 취소 요청을 발행하는 경우 제외), 원치 않는 카피다 데이터 및 카피 도네 메시지를 폐기 할 수 있습니다..

복사 모드에서 백엔드-검출 된 오류가 발생한 경우 백엔드는 ErrorResponse 메시지를 발행하고 정상 처리로 되돌립니다. 프론트 엔드는 오류 응답을 복사 모드를 종료하는 것으로 취급해야합니다.

COPYDATA 메시지 사이에 주입자 및 PARAMETERSTATUS 메시지를 산재 할 수 있습니다. 프론트 엔드는 이러한 사례를 처리해야하며 다른 비동기 메시지 유형에 대해서도 준비해야합니다 (섹션 50.2.6). 그렇지 않으면 CopyData 또는 Copydone 이외의 다른 메시지 유형은 복사 모드 종료로 취급 될 수 있습니다.

Copy-Both라는 다른 카피 관련 모드가있어 고속 벌크 데이터 전송and서버에서. Walsender 모드의 백엔드가 A를 실행할 때 카피 모드가 시작됩니다.start_replication진술. 백엔드는 CopyBothResponse 롤 토토를 프론트 엔드에 보냅니다.섹션 50.3사본 모드를 통해 전송 된 서브 프로토콜에 대한 자세한 내용은

CopyInResponse, CopyOUTresponse 및 CopyBothResponse 메시지에는 행당 열 수의 프론트 엔드를 알려주는 필드와 각 열에 사용되는 형식 코드가 포함됩니다. (현재 구현 시점에서 주어진 모든 열COPY작동은 동일한 형식을 사용하지만 메시지 디자인은 이것을 가정하지 않습니다.)

50.2.6. 비동기 작업

백엔드가 프론트 엔드의 명령 스트림에 의해 구체적으로 촉발되지 않은 메시지를 보내는 몇 가지 사례가 있습니다. 프론트 엔드는 쿼리에 참여하지 않더라도 언제든지 이러한 메시지를 처리 ​​할 준비를해야합니다.

외부 활동으로 인해 주석 반응 롤 토토가 생성 될 수 있습니다. 예를 들어, 데이터베이스 관리자가 A를 명령하는 경우"빠른"데이터베이스 종료, 백엔드는 연결을 닫기 전에이 사실을 나타내는 주석 반응을 보냅니다. 따라서, 프론트 엔드는 연결이 명목상으로 유휴 상태 일 때에도 항상 주석 반응 메시지를 수락하고 표시 할 준비가되어 있어야합니다.

Parameterstatus 메시지는 백엔드가 프론트 엔드가 알아야 할 매개 변수에 대한 활성 값이 변경 될 때마다 생성됩니다. 가장 일반적으로 이것은 A에 대한 응답으로 발생합니다.SETFrontend에서 실행 된 SQL 명령은 효과적으로 동기화되어 있지만 관리자가 구성 파일을 변경 한 다음를 보냈기 때문에 매개 변수 상태 변경이 발생할 수도 있습니다.Sighup서버에 신호를 보냅니다. 또한, ASET명령이 롤백됩니다. 현재 유효 값을보고하기 위해 적절한 Parameterstatus 메시지가 생성됩니다.

현재 Parameterstatus가 생성 될 하드 유선 매개 변수 세트가 있습니다.server_version, Server_encoding, client_encoding, Application_Name, is_superuser, Session_Authorization, Datestyle, IntervalStyle, TimeZone, integer_datetimesStandard_Conforming_strings. (Server_encoding, TimeZoneinteger_datetimes8.0 이전에 릴리스에 의해보고되지 않았다;Standard_Conforming_strings8.1 이전에 릴리스에 의해보고되지 않았습니다.IntervalStyle8.4 이전에 릴리스에 의해보고되지 않았습니다.Application_Name9.0 이전에 릴리스에 의해보고되지 않았습니다.) 참고server_version, Server_encodingandinteger_datetimes시작 후에는 변경할 수없는 의사 파라미터입니다. 이 세트는 미래에 변경되거나 구성 가능할 수도 있습니다.

프론트 엔드가 발행 한 경우듣기명령, 그러면 백엔드는 a 될 때마다 elitificationResponse 롤 토토를 보냅니다.Notify동일한 채널 이름에 대해 명령이 실행됩니다.

참고 :현재, NotificationResponse는 거래 외부에서만 전송 될 수 있으므로 명령-응답 시리즈의 중간에서는 발생하지 않지만 ReadyForquery 직전에 발생할 수 있습니다. 그러나 그것을 가정하는 프론트 엔드 논리를 설계하는 것은 현명하지 않습니다.

50.2.7. 진행중인 요청 취소

쿼리 처리 중에 프론트 엔드는 쿼리 취소를 요청할 수 있습니다. 구현 효율성 때문에 백엔드에 대한 공개 연결에서 취소 요청은 직접 전송되지 않습니다. 쿼리 처리 중에 프론트 엔드에서 새로운 입력을 지속적으로 검사하는 백엔드를 원하지 않습니다.

취소 요청을 발행하려면 Frontend는 서버에 대한 새 연결을 엽니 다. 서버는이 요청을 처리 한 다음 연결을 닫습니다.

연결 시동 중에 동일한 키 데이터 (PID 및 Secret Key)가 전달 된 동일한 키 데이터 (PID 및 Secret Key)가 포함되어 있지 않으면 CalcelRequest 메시지가 무시됩니다. 요청이 현재 실행중인 백엔드의 PID 및 비밀 키와 일치하면 현재 쿼리의 처리가 중단됩니다.

취소 신호는 효과가 있거나 영향을 미치지 않을 수 있습니다. 예를 들어 백엔드가 쿼리 처리를 마친 후에 도착하면 효과가 없습니다. 취소가 효과적이면 오류 메시지로 현재 명령이 조기에 종료됩니다..

이 모든 것의 결과는 보안과 효율성의 이유로 프론트 엔드는 취소 요청이 성공했는지 여부를 직접적인 방법이 없다는 것입니다. 백엔드가 쿼리에 응답 할 때까지 계속 기다려야합니다.

취소 요청이 서버에 대한 새 연결을 통해 전송되기 때문에 일반 프론트 엔드/백엔드 통신 링크가 아닌 쿼리가 취소 될 프론트 엔드뿐만 아니라 모든 프로세스에서 취소 요청을 발행 할 수 있습니다. 이는 다중 프로세스 애플리케이션을 구축 할 때 추가 유연성을 제공 할 수 있습니다.

50.2.8. 종료

정상적이고 우아한 종료 절차는 프론트 엔드가 종료 롤 토토를 보내고 즉시 연결을 닫는다는 것입니다. 이 롤 토토를 받으면 백엔드는 연결을 닫고 종료합니다.

드문 경우 (예 : 관리자 구성 데이터베이스 종료와 같은 경우) 백엔드는 프론트 엔드 요청없이 연결을 끊을 수 있습니다. 이 경우 백엔드는 연결을 닫기 전에 연결이 끊어진 이유를 제공하는 오류 또는 통지 메시지를 보내려고 시도합니다.

다른 종료 시나리오는 한쪽 끝 또는 다른 쪽의 핵심 덤프, 통신 링크 손실, 메시지 바탕리 동기화 손실 등과 같은 다양한 실패 사례에서 발생합니다. 프론트 엔드 또는 백엔드가 연결의 예기치 않은 폐쇄를 보면 정리하고 종료해야합니다. 프론트 엔드는 서버가 종료되지 않으려면 서버를 다시 접촉하여 새로운 백엔드를 시작할 수있는 옵션이 있습니다.

정상 또는 비정상 종료의 경우, 공개 거래가 롤백되어 커밋되지 않습니다. 그러나 프론트 엔드가 연결이 끊어지면select쿼리가 처리 중이며, 백엔드는 단절을 알아 차리기 전에 쿼리를 완료 할 것입니다. 쿼리가 트랜잭션 블록 외부에있는 경우 (시작 ... 커밋시퀀스) 그러면 연결이 끊김이 인식되기 전에 결과가 커밋 될 수 있습니다.

50.2.9. SSL세션 암호화

ifPostgreSQLSSL지원, 프론트 엔드/백엔드 커뮤니케이션을 사용하여 암호화 할 수 있습니다SSL. 이는 공격자가 세션 트래픽을 캡처 할 수있는 환경에서 커뮤니케이션 보안을 제공합니다.PostgreSQL세션SSL, 참조섹션 17.9.

시작하려면SSL-암호화 된 연결, 프론트 엔드는 처음에 startupmessage 대신 sslrequest 메시지를 보냅니다. 그런 다음 서버는 단일 바이트로 응답합니다.S또는N, 그것이 기꺼이 수행하고 싶지 않다는 것을 나타냅니다SSL. 응답에 불만이있는 경우 프론트 엔드는이 시점에서 연결을 닫을 수 있습니다.S, 수행SSL스타트 업 핸드 셰이크 (여기에 설명되지 않음, 일부는SSL26126_26292SSL-암호화. 계속하려면N, 일반적인 startupmessage를 보내고 암호화없이 진행하십시오.

프론트 엔드는 서버에서 sslrequest에 대한 errormessage 응답을 처리 할 준비를해야합니다. 서버가 추가를 선행하는 경우에만 발생합니다SSL지원PostgreSQL. (이러한 서버는 이제 매우 고대적이며 더 이상 야생에 존재하지 않을 수 있습니다.)이 경우 연결이 닫혀 있어야하지만 프론트 엔드는 새로운 연결을 열고 요청하지 않고 진행할 수 있습니다SSL.

초기 sslRequest는 CancelRequest 롤 토토를 보내기 위해 열려있는 연결에 사용할 수도 있습니다.

프로토콜 자체가 서버가 강제로하는 방법을 제공하지는 않지만SSL암호화, 관리자는 암호화되지 않은 세션을 인증 검사의 부산물로 거부하도록 서버를 구성 할 수 있습니다..