Questa sezione fornisce indicazioni per la risoluzione dei problemi comuni riscontrati durante l'utilizzo di un connettore Origine PostgreSQL di Debezium, inclusi i seguenti tipi di connettori:
Snapshot non riuscito
Se l'utente non dispone del privilegio USAGE sullo schema della tabella, il connettore non può creare lo snapshot iniziale e si verifica il seguente errore:
Snapshotting of table SCHEMA.TABLE failed
Per risolvere il problema, utilizza il comando SQL GRANT per concedere il privilegio USAGE sullo schema:
GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE_NAME;
Impossibile creare lo slot di replica
Se crei più connettori per lo stesso server di database PostgreSQL, i connettori devono utilizzare slot di replica diversi. In caso contrario, si verifica il seguente errore:
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)
Potresti anche visualizzare un errore simile al seguente:
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.
Per risolvere il problema, imposta slot.name su un valore univoco. Per saperne di più,
consulta
Configurare più connettori per lo stesso server di database
nella documentazione di Debezium.
Errore durante la creazione o l'aggiornamento della pubblicazione
Un connettore PostgreSQL di Debezium legge gli eventi di modifica da una pubblicazione nel database. Se il connettore non riesce ad accedere alla pubblicazione o a crearla, nei log del connettore potrebbero essere visualizzati gli errori elencati nelle sezioni seguenti.
La pubblicazione non esiste
Se publication.autocreate.mode=disabled e la pubblicazione non esiste, si verifica il seguente errore:
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)
Per risolvere questo errore, crea la pubblicazione manualmente o imposta publication.autocreate.mode su all_tables o filtered.
Impossibile aggiornare la pubblicazione filtrata
Se publication.autocreate.mode=filtered e il connettore non riesce ad aggiornare una pubblicazione esistente, si verifica il seguente errore:
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)
Per risolvere il problema, assicurati che l'utente del database sia il proprietario della pubblicazione.
Impossibile creare la pubblicazione filtrata
Se publication.autocreate.mode=filtered e il connettore non riesce a creare una nuova pubblicazione, si verifica il seguente errore:
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)
Per risolvere il problema, assicurati che l'utente del database disponga dell'autorizzazione CREATE sul database e sia il proprietario delle tabelle incluse.
È già attiva una pubblicazione per tutte le tabelle
Se publication.autocreate.mode=filtered e la pubblicazione è già stata creata con FOR ALL TABLES, si verifica il seguente errore:
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)
Questo errore si verifica perché il connettore tenta di modificare le tabelle in una pubblicazione per tutte le tabelle. Per risolvere il problema, elimina la pubblicazione esistente e riavvia il connettore. In alternativa, aggiorna "publication.autocreate.mode" a all_tables.
Devi essere un super user per creare la pubblicazione FOR ALL TABLES
Se publication.autocreate.mode=all_tables e il connettore tenta di creare una nuova pubblicazione, potrebbe verificarsi il seguente errore:
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)
Questo errore si verifica quando l'utente del database non è un super user (o non ha il ruolo cloudsqlsuperuser in Cloud SQL), necessario per creare una pubblicazione con FOR ALL TABLES. Per risolvere questo errore, procedi in uno dei seguenti modi:
- Crea la pubblicazione manualmente.
- Aggiorna
publication.autocreate.modea un valore diverso. - Concedi
SUPERUSER(ocloudsqlsuperuserin Cloud SQL) all'utente del database. Tuttavia, in genere questa opzione non è consigliata, perché questi ruoli ignorano i controlli delle autorizzazioni nel database.
Passaggi successivi
- Risolvere i problemi relativi ai cluster e ai connettori Connect
- Creare un connettore Origine Cloud SQL per PostgreSQL
- Creare un connettore Origine PostgreSQL generica