En esta sección, se proporciona orientación para solucionar problemas habituales que se producen cuando se usa un conector fuente de Debezium PostgreSQL, incluidos los siguientes tipos de conectores:
No se pudo crear la instantánea
Si el usuario no tiene el privilegio USAGE en el esquema de la tabla, el conector no puede crear la instantánea inicial y se produce el siguiente error:
Snapshotting of table SCHEMA.TABLE failed
Para resolver este problema, usa el comando GRANT de SQL para otorgar el privilegio USAGE en el esquema:
GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE_NAME;
No se pudo crear la ranura de replicación
Si creas varios conectores para el mismo servidor de bases de datos de PostgreSQL, los conectores deben usar diferentes ranuras de replicación. De lo contrario, se producirá el siguiente error:
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)
Es posible que también veas un error como el siguiente:
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.
Para resolver este problema, establece slot.name en un valor único. Para obtener más información, consulta Cómo configurar varios conectores para el mismo servidor de bases de datos en la documentación de Debezium.
Se produjo un error al crear o actualizar la publicación
Un conector de PostgreSQL de Debezium lee eventos de cambio de una publicación en la base de datos. Si el conector no puede acceder a la publicación o crearla, es posible que aparezcan en los registros del conector los errores que se indican en las siguientes secciones.
La publicación no existe
Si publication.autocreate.mode=disabled y la publicación no existen, se produce el siguiente error:
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)
Para resolver este error, crea la publicación de forma manual o configura publication.autocreate.mode como all_tables o filtered.
No se pudo actualizar la publicación filtrada
Si publication.autocreate.mode=filtered y el conector no puede actualizar una publicación existente, se produce el siguiente error:
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)
Para resolver este problema, asegúrate de que el usuario de la base de datos sea el propietario de la publicación.
No se pudo crear la publicación filtrada
Si publication.autocreate.mode=filtered y el conector no pueden crear una publicación nueva, se produce el siguiente error:
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)
Para resolver este problema, asegúrate de que el usuario de la base de datos tenga permiso de CREATE en la base de datos y sea el propietario de las tablas incluidas.
Ya hay una publicación activa para todas las tablas
Si publication.autocreate.mode=filtered y la publicación ya se creó con FOR ALL TABLES, se produce el siguiente error:
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)
Este error se produce porque el conector intenta modificar las tablas de una publicación para todas las tablas. Para resolver este problema, descarta la publicación existente y reinicia el conector. Como alternativa, actualiza "publication.autocreate.mode" a all_tables.
Debe ser superusuario para crear la publicación FOR ALL TABLES
Si publication.autocreate.mode=all_tables y el conector intenta crear una publicación nueva, es posible que se produzca el siguiente error:
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)
Este error se produce cuando el usuario de la base de datos no es un superusuario (o no tiene el rol cloudsqlsuperuser en Cloud SQL), lo que se requiere para crear una publicación con FOR ALL TABLES. Para resolver este error, realiza una de las siguientes acciones:
- Crea la publicación manualmente.
- Actualiza
publication.autocreate.modea un valor diferente. - Otorga
SUPERUSER(ocloudsqlsuperuseren Cloud SQL) al usuario de la base de datos. Sin embargo, en general, no se recomienda esta opción, ya que estos roles omiten las verificaciones de permisos en la base de datos.
¿Qué sigue?
- Soluciona problemas de clústeres y conectores de Connect
- Crea un conector de fuente de Cloud SQL para PostgreSQL
- Crea un conector de fuente de PostgreSQL genérico