Fehlerbehebung bei einem PostgreSQL-Quellconnector

In diesem Abschnitt finden Sie eine Anleitung zur Fehlerbehebung bei häufigen Problemen, die bei der Verwendung eines Debezium PostgreSQL-Quellconnectors auftreten, einschließlich der folgenden Connectortypen:

Snapshotting fehlgeschlagen

Wenn der Nutzer nicht über die Berechtigung USAGE für das Schema der Tabelle verfügt, kann der Connector den ersten Snapshot nicht erstellen und der folgende Fehler tritt auf:

Snapshotting of table SCHEMA.TABLE failed

Verwenden Sie den SQL-Befehl GRANT, um dieses Problem zu beheben und die Berechtigung USAGE für das Schema zu gewähren:

GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE_NAME;

Erstellung des Replikationsslots fehlgeschlagen

Wenn Sie mehrere Connectors für denselben PostgreSQL-Datenbankserver erstellen, müssen die Connectors unterschiedliche Replikationsslots verwenden. Andernfalls tritt der folgende Fehler auf:

io.debezium.DebeziumException: Creation of replication slot failed; when setting up multiple connectors
for the same database host, please make sure to use a distinct replication slot name for each.
    at io.debezium.connector.postgresql.PostgresConnectorTask.tryToCreateSlot(PostgresConnectorTask.java:282)

Möglicherweise wird auch ein Fehler wie der folgende angezeigt:

io.debezium.DebeziumException: Failed to start replication stream at LSN{0/80002808}; when setting
up multiple connectors for the same database host, please make sure to use a distinct replication
slot name for each.

Setzen Sie slot.name auf einen eindeutigen Wert, um dieses Problem zu beheben. Weitere Informationen finden Sie in der Debezium-Dokumentation unter Setting up multiple connectors for same database server (Mehrere Connectors für denselben Datenbankserver einrichten).

Fehler beim Erstellen oder Aktualisieren der Veröffentlichung

Ein Debezium PostgreSQL-Connector liest Änderungsereignisse aus einer Veröffentlichung in der Datenbank. Wenn der Connector nicht auf die Veröffentlichung zugreifen oder sie nicht erstellen kann, werden in den Connector-Logs möglicherweise die in den folgenden Abschnitten aufgeführten Fehler angezeigt.

Die Veröffentlichung ist nicht vorhanden

Wenn publication.autocreate.mode=disabled und die Veröffentlichung nicht vorhanden ist, tritt der folgende Fehler auf:

org.apache.kafka.connect.errors.ConnectException: Publication PUBLICATION autocreation is disabled, please
create one and restart the connector.
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.initPublication(PostgresReplicationConnection.java:163)

Erstellen Sie die Veröffentlichung manuell oder setzen Sie publication.autocreate.mode auf all_tables oder filtered, um diesen Fehler zu beheben.

Gefilterte Veröffentlichung kann nicht aktualisiert werden

Wenn publication.autocreate.mode=filtered und der Connector eine vorhandene Veröffentlichung nicht aktualisieren kann, tritt der folgende Fehler auf:

org.apache.kafka.connect.errors.ConnectException: Unable to update filtered publication PUBLICATION for
"SCHEMA"."TABLE"
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.createOrUpdatePublicationModeFilterted(PostgresReplicationConnection.java:227)
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.initPublication(PostgresReplicationConnection.java:191)

Achten Sie darauf, dass der Datenbanknutzer der Inhaber der Veröffentlichung ist, um dieses Problem zu beheben.

Gefilterte Veröffentlichung kann nicht erstellt werden

Wenn publication.autocreate.mode=filtered und der Connector keine neue Veröffentlichung erstellen kann, tritt der folgende Fehler auf:

org.apache.kafka.connect.errors.ConnectException: Unable to create filtered publication PUBLICATION for
"SCHEMA"."TABLE"
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.createOrUpdatePublicationModeFilterted(PostgresReplicationConnection.java:227)
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.initPublication(PostgresReplicationConnection.java:171)

Achten Sie darauf, dass der Datenbanknutzer die Berechtigung CREATE für die Datenbank hat und der Inhaber der enthaltenen Tabellen ist, um dieses Problem zu beheben.

Eine Veröffentlichung für alle Tabellen ist bereits aktiv

Wenn publication.autocreate.mode=filtered und die Veröffentlichung bereits mit FOR ALL TABLES erstellt wurde, tritt der folgende Fehler auf:

io.debezium.DebeziumException: A logical publication for all tables named 'PUBLICATION' for plugin
'PGOUTPUT' and database 'DATABASE' is already active on the server and can not be altered. If you need to
exclude some tables or include only specific subset, please recreate the publication with necessary
configuration or let plugin recreate it by dropping existing publication. Otherwise please change the
'publication.autocreate.mode' property to 'all_tables'.
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.initPublication(PostgresReplicationConnection.java:181)

Dieser Fehler tritt auf, weil der Connector versucht, die Tabellen in einer Veröffentlichung für alle Tabellen zu ändern. Löschen Sie die vorhandene Veröffentlichung und starten Sie den Connector neu, um dieses Problem zu beheben. Alternativ können Sie „publication.autocreate.mode“ auf all_tables aktualisieren.

Sie müssen Superuser sein, um eine Veröffentlichung für alle Tabellen zu erstellen

Wenn publication.autocreate.mode=all_tables und der Connector versucht, eine neue Veröffentlichung zu erstellen, kann der folgende Fehler auftreten:

io.debezium.jdbc.JdbcConnectionException: ERROR: must be superuser to create FOR ALL TABLES publication
    at io.debezium.connector.postgresql.connection.PostgresReplicationConnection.initPublication(PostgresReplicationConnection.java:207)

Dieser Fehler tritt auf, wenn der Datenbanknutzer kein Superuser ist (oder in Cloud SQL nicht die Rolle cloudsqlsuperuser hat). Diese Rolle ist erforderlich, um eine Veröffentlichung mit FOR ALL TABLES zu erstellen. Führen Sie einen der folgenden Schritte aus, um diesen Fehler zu beheben:

  • Erstellen Sie die Veröffentlichung manuell.
  • Aktualisieren Sie publication.autocreate.mode auf einen anderen Wert.
  • Gewähren Sie dem Datenbanknutzer SUPERUSER (oder cloudsqlsuperuser in Cloud SQL). Diese Option wird jedoch im Allgemeinen nicht empfohlen, da diese Rollen die Berechtigungsprüfungen in der Datenbank umgehen.

Nächste Schritte