PostgreSQL 소스 커넥터 문제 해결

이 섹션에서는 다음 커넥터 유형을 비롯하여 Debezium PostgreSQL 소스 커넥터를 사용할 때 발생하는 일반적인 문제에 대한 문제 해결 안내를 제공합니다.

스냅샷 생성 실패

사용자에게 테이블 스키마에 대한 USAGE 권한이 없으면 커넥터가 초기 스냅샷을 만들 수 없으며 다음 오류가 발생합니다.

Snapshotting of table SCHEMA.TABLE failed

이 문제를 해결하려면 GRANT SQL 명령어를 사용하여 스키마에 대한 USAGE 권한을 부여하세요.

GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE_NAME;

복제 슬롯을 만들 수 없음

동일한 PostgreSQL 데이터베이스 서버에 여러 커넥터를 만드는 경우 커넥터는 서로 다른 복제 슬롯을 사용해야 합니다. 그렇지 않으면 다음 오류가 발생합니다.

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)

다음과 같은 오류가 표시될 수도 있습니다.

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.

이 문제를 해결하려면 slot.name을 고유한 값으로 설정하세요. 자세한 내용은 Debezium 문서에서 동일한 데이터베이스 서버에 여러 커넥터 설정 을 참조하세요.

게시를 만들거나 업데이트하는 중에 오류가 발생했습니다.

Debezium PostgreSQL 커넥터는 데이터베이스의 게시 에서 변경 이벤트를 읽습니다. 커넥터가 게시를 만들거나 액세스할 수 없는 경우 다음 섹션에 나열된 오류가 커넥터 로그에 표시될 수 있습니다.

게시가 존재하지 않음

publication.autocreate.mode=disabled이고 게시가 존재하지 않으면 다음 오류가 발생합니다.

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)

이 오류를 해결하려면 게시를 수동으로 만들거나 publication.autocreate.modeall_tables 또는 filtered로 설정하세요.

필터링된 게시를 업데이트할 수 없음

publication.autocreate.mode=filtered이고 커넥터가 기존 게시를 업데이트할 수 없는 경우 다음 오류가 발생합니다.

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)

이 문제를 해결하려면 데이터베이스 사용자가 게시의 소유자인지 확인하세요.

필터링된 게시를 만들 수 없음

publication.autocreate.mode=filtered이고 커넥터가 새 게시를 만들 수 없는 경우 다음 오류가 발생합니다.

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)

이 문제를 해결하려면 데이터베이스 사용자에게 데이터베이스에 대한 CREATE 권한이 있고 포함된 테이블의 소유자인지 확인하세요.

모든 테이블에 대한 게시가 이미 활성 상태임

publication.autocreate.mode=filtered이고 게시가 이미 FOR ALL TABLES로 생성된 경우 다음 오류가 발생합니다.

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)

이 오류는 커넥터가 모든 테이블에 대한 게시에서 테이블을 변경하려고 시도하기 때문에 발생합니다. 이 문제를 해결하려면 기존 게시를 삭제하고 커넥터를 다시 시작하세요. 또는 'publication.autocreate.mode'를 all_tables로 업데이트하세요.

FOR ALL TABLES 게시를 만들려면 슈퍼유저여야 함

publication.autocreate.mode=all_tables이고 커넥터가 새 게시를 만들려고 시도하는 경우 다음 오류가 발생할 수 있습니다.

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)

이 오류는 데이터베이스 사용자가 슈퍼유저가 아니거나 Cloud SQL에 FOR ALL TABLES로 게시를 만드는 데 필요한 cloudsqlsuperuser 역할이 없는 경우에 발생합니다. 이 오류를 해결하려면 다음 중 하나를 수행하세요.

  • 게시를 수동으로 만듭니다.
  • publication.autocreate.mode를 다른 값으로 업데이트합니다.
  • 데이터베이스 사용자에게 SUPERUSER (또는 Cloud SQL의 cloudsqlsuperuser)를 부여합니다. 하지만 일반적으로 이 옵션은 권장되지 않습니다. 이러한 역할은 데이터베이스의 권한 확인을 우회하기 때문입니다.

다음 단계