public interface PGReplicationStream
read()
method.
It means that process wal record should be fast as possible, because during process wal record
lead to disconnect by timeout from server.Modifier and Type | Method and Description |
---|---|
void |
close()
Stop replication changes from server and free resources.
|
void |
forceUpdateStatus()
Force send to backend status about last received, flushed and applied LSN.
|
LogSequenceNumber |
getLastAppliedLSN()
Last applied lsn send in update message to backed.
|
LogSequenceNumber |
getLastFlushedLSN()
Last flushed lsn send in update message to backend.
|
LogSequenceNumber |
getLastReceiveLSN()
Parameter updates by execute
read() method. |
boolean |
isClosed() |
ByteBuffer |
read()
Read next wal record from backend.
|
ByteBuffer |
readPending()
Read next wal record from backend.
|
void |
setAppliedLSN(LogSequenceNumber applied)
Parameter used only physical replication and define which lsn already was apply on standby.
|
void |
setFlushedLSN(LogSequenceNumber flushed)
Set flushed LSN.
|
ByteBuffer read() throws SQLException
Read next wal record from backend. It method can be block until new message will not get from server.
A single WAL record is never split across two XLogData messages. When a WAL record crosses a WAL page boundary, and is therefore already split using continuation records, it can be split at the page boundary. In other words, the first main WAL record and its continuation records can be sent in different XLogData messages.
ByteBuffer.array()
carefullySQLException
- when some internal exception occurs during read from streamByteBuffer readPending() throws SQLException
Read next wal record from backend. It method can't be block and in contrast to read()
. If message from backend absent return null. It allow periodically
check message in stream and if they absent sleep some time, but it time should be less than
CommonOptions.getStatusInterval()
to avoid disconnect from the server.
A single WAL record is never split across two XLogData messages. When a WAL record crosses a WAL page boundary, and is therefore already split using continuation records, it can be split at the page boundary. In other words, the first main WAL record and its continuation records can be sent in different XLogData messages.
ByteBuffer.array()
carefully.SQLException
- when some internal exception occurs during read from streamLogSequenceNumber getLastReceiveLSN()
read()
method.read()
methodLogSequenceNumber getLastFlushedLSN()
setFlushedLSN(LogSequenceNumber)
LogSequenceNumber getLastAppliedLSN()
setAppliedLSN(LogSequenceNumber)
void setFlushedLSN(LogSequenceNumber flushed)
flushed
- not null location of the last WAL flushed to disk in the standby.forceUpdateStatus()
void setAppliedLSN(LogSequenceNumber applied)
applied
- not null location of the last WAL applied in the standby.forceUpdateStatus()
void forceUpdateStatus() throws SQLException
PGReplicationStream
send status to backend periodical by
configured interval via CommonOptions.getStatusInterval()
SQLException
- when some internal exception occurs during read from streamCommonOptions.getStatusInterval()
boolean isClosed()
true
if replication stream was already close, otherwise return false
void close() throws SQLException
Stop replication changes from server and free resources. After that connection can be reuse to another queries. Also after close current stream they cannot be used anymore.
Note: This method can spend much time for logical replication stream on postgresql version 9.6 and lower, because postgresql have bug - during decode big transaction to logical form and during wait new changes postgresql ignore messages from client. As workaround you can close replication connection instead of close replication stream. For more information about it problem see mailing list thread Stopping logical replication protocol
SQLException
- when some internal exception occurs during end streamingCopyright © 2017 PostgreSQL Global Development Group. All rights reserved.