토토 베이 — 목표를 기다림LSN재생, 선택적으로 시간 초과 포함
LSN '을 기다리세요.lsn' [ 와 (옵션[, ...] ) ] 어디에서옵션다음과 같을 수 있습니다:시간 초과 '시간 초과' NO_THROW
복구가 다시 재생될 때까지 기다립니다.lsn. 그렇지 않은 경우시간 초과이 지정되거나 0으로 설정되면 이 명령은lsn. 시간 초과 시 또는 서버가 이전에 승격된 경우lsn도달하면 오류가 발생합니다.NO_THROW은 WITH 절에 지정되어 있습니다. 만일NO_THROW이 지정되면 명령에서 오류가 발생하지 않습니다.
가능한 반환 값은 다음과 같습니다.성공, 시간 초과및복구 중이 아님.
lsn대상을 지정합니다LSN기다립니다.
함께 (옵션 [, ...] )이 절은 대기 작업에 대한 선택적 매개변수를 지정합니다. 다음 매개변수가 지원됩니다.
시간 초과 '시간 초과'지정된 경우 및시간 초과이 0보다 크면 명령은 다음까지 기다립니다.lsn도달했거나 지정된시간 초과경과되었습니다.
그시간 초과은 밀리초 단위의 정수로 제공될 수 있습니다. 또한 밀리초 단위의 정수 또는 단위가 있는 숫자로 문자열 리터럴로 제공될 수도 있습니다(참조)섹션 19.1.1).
NO_THROW시간 초과 또는 기본에서 실행 중인 경우 오류를 발생시키지 않도록 지정하십시오. 이 경우 결과 상태는 반환 값에서 가져올 수 있습니다.
성공이 반환 값은 우리가 목표에 성공적으로 도달했음을 나타냅니다.lsn.
시간 초과이 반환 값은 목표에 도달하기 전에 시간 초과가 발생했음을 나타냅니다.lsn.
복구 중이 아님이 반환 값은 데이터베이스 서버가 복구 상태에 있지 않음을 나타냅니다. 이는 명령을 수신하는 시점에 데이터베이스 서버가 복구 중이 아니었거나 대상에 도달하기 전에 승격되었음을 의미할 수 있습니다.lsn.
토토 베이주세요명령은 다음까지 기다립니다.lsn대기 중에 재생됩니다. 즉, 이 명령을 실행한 후에서 반환되는 값은 다음과 같습니다.pg_last_wal_replay_lsn다음보다 크거나 같아야 합니다.lsn값. 이는 읽기에는 비동기 복제본을 사용하고 쓰기에는 기본 복제본을 사용하면서 쓰기 읽기 일관성을 달성하는 데 유용합니다. 이 경우,lsn마지막 수정 사항은 클라이언트 애플리케이션 측 또는 연결 풀러 측에 저장되어야 합니다.
토토 베이주세요명령은 대기 중에 호출되어야 합니다. 사용자가 실행하는 경우토토 베이주세요기본에서는 다음을 제외하면 오류가 발생합니다.NO_THROW은 WITH 절에 지정되어 있습니다. 그러나 만일토토 베이주세요대기에서 승격된 기본에서 호출되며lsn이미 재생되었으므로토토 베이주세요명령은 즉시 종료됩니다.
당신은 사용할 수 있습니다토토 베이주세요기다리는 명령pg_lsn값. 예를 들어 애플리케이션은 다음을 업데이트할 수 있습니다.영화테이블을 가져오고lsn방금 변경 후. 이 예에서는pg_current_wal_insert_lsn주 서버에서lsn그렇다면동기_커밋다음으로 설정될 수 있음꺼짐.
postgres=# 업데이트 영화 SET 장르 = '드라마틱' WHERE 장르 = '드라마'; 업데이트 100 postgres=# SELECT pg_current_wal_insert_lsn(); pg_current_wal_insert_lsn ------- 0/306EE20 (1행)
그러면 응용프로그램이 실행될 수 있습니다토토 베이주세요와 함께lsn기본에서 얻었습니다. 그 후에는 기본에서 변경된 사항이 복제본에서 표시되도록 보장되어야 합니다.
postgres=# LSN '0/306EE20'을 기다립니다; 상태 -------- 성공 (1줄) postgres=# SELECT * FROM 영화 WHERE 장르 = '드라마'; 장르 ------- (0행)
시간 초과 이전에 대상 LSN에 도달하지 않으면 오류가 발생합니다.
postgres=# LSN '0/306EE20' 대기(시간 초과 '0.1초'); 오류: 대상 LSN 0/306EE20이 재생되기를 기다리는 동안 시간이 초과되었습니다. 현재 재생 LSN 0/306EA60
같은 예에서는 다음을 사용합니다.토토 베이주세요함께NO_THROW옵션.
postgres=# LSN '0/306EE20' 대기(TIMEOUT '100ms', NO_THROW); 상태 -------- 시간 초과 (1행)