You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
* message.h
|
|
|
|
* Exports from replication/logical/message.c
|
|
|
|
*
|
|
|
|
* Copyright (c) 2013-2024, PostgreSQL Global Development Group
|
|
|
|
*
|
|
|
|
* src/include/replication/message.h
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
|
|
|
#ifndef PG_LOGICAL_MESSAGE_H
|
|
|
|
#define PG_LOGICAL_MESSAGE_H
|
|
|
|
|
|
|
|
#include "access/xlog.h"
|
|
|
|
#include "access/xlogdefs.h"
|
|
|
|
#include "access/xlogreader.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Generic logical decoding message wal record.
|
|
|
|
*/
|
|
|
|
typedef struct xl_logical_message
|
|
|
|
{
|
|
|
|
Oid dbId; /* database Oid emitted from */
|
|
|
|
bool transactional; /* is message transactional? */
|
|
|
|
Size prefix_size; /* length of prefix */
|
|
|
|
Size message_size; /* size of the message */
|
|
|
|
/* payload, including null-terminated prefix of length prefix_size */
|
|
|
|
char message[FLEXIBLE_ARRAY_MEMBER];
|
|
|
|
} xl_logical_message;
|
|
|
|
|
|
|
|
#define SizeOfLogicalMessage (offsetof(xl_logical_message, message))
|
|
|
|
|
|
|
|
extern XLogRecPtr LogLogicalMessage(const char *prefix, const char *message,
|
Add flush option to pg_logical_emit_message()
Since its introduction, LogLogicalMessage() (via the SQL interface
pg_logical_emit_message()) has never included a call to XLogFlush(),
causing it to potentially lose messages on a crash when used in
non-transactional mode. This has come up to me as a problem while
playing with ideas to design a test suite for what has become
039_end_of_wal.pl introduced in bae868caf222 by Thomas Munro, because
there are no direct ways to force a WAL flush via SQL.
The default is false, to not flush messages and influence existing
use-cases where this function could be used. If set to true, the
message emitted is flushed before returning back to the caller, making
the message durable on crash. This new option has no effect when using
pg_logical_emit_message() in transactional mode, as the record's flush
is guaranteed by the WAL record generated by the transaction committed.
Two queries of test_decoding are tweaked to cover the new code path for
the flush.
Bump catalog version.
Author: Michael Paquier
Reviewed-by: Andres Freund, Amit Kapila, Fujii Masao, Tung Nguyen, Tomas
Vondra
Discussion: https://postgr.es/m/ZNsdThSe2qgsfs7R@paquier.xyz
2 years ago
|
|
|
size_t size, bool transactional,
|
|
|
|
bool flush);
|
|
|
|
|
|
|
|
/* RMGR API */
|
|
|
|
#define XLOG_LOGICAL_MESSAGE 0x00
|
|
|
|
extern void logicalmsg_redo(XLogReaderState *record);
|
|
|
|
extern void logicalmsg_desc(StringInfo buf, XLogReaderState *record);
|
|
|
|
extern const char *logicalmsg_identify(uint8 info);
|
|
|
|
|
Phase 2 of pgindent updates.
Change pg_bsd_indent to follow upstream rules for placement of comments
to the right of code, and remove pgindent hack that caused comments
following #endif to not obey the general rule.
Commit e3860ffa4dd0dad0dd9eea4be9cc1412373a8c89 wasn't actually using
the published version of pg_bsd_indent, but a hacked-up version that
tried to minimize the amount of movement of comments to the right of
code. The situation of interest is where such a comment has to be
moved to the right of its default placement at column 33 because there's
code there. BSD indent has always moved right in units of tab stops
in such cases --- but in the previous incarnation, indent was working
in 8-space tab stops, while now it knows we use 4-space tabs. So the
net result is that in about half the cases, such comments are placed
one tab stop left of before. This is better all around: it leaves
more room on the line for comment text, and it means that in such
cases the comment uniformly starts at the next 4-space tab stop after
the code, rather than sometimes one and sometimes two tabs after.
Also, ensure that comments following #endif are indented the same
as comments following other preprocessor commands such as #else.
That inconsistency turns out to have been self-inflicted damage
from a poorly-thought-through post-indent "fixup" in pgindent.
This patch is much less interesting than the first round of indent
changes, but also bulkier, so I thought it best to separate the effects.
Discussion: https://postgr.es/m/E1dAmxK-0006EE-1r@gemulon.postgresql.org
Discussion: https://postgr.es/m/30527.1495162840@sss.pgh.pa.us
8 years ago
|
|
|
#endif /* PG_LOGICAL_MESSAGE_H */
|