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 で cloudsqlsuperuser ロールがない)場合に発生します。FOR ALL TABLES を使用してパブリケーションを作成するには、スーパーユーザーである必要があります。このエラーを解決するには、次のいずれかを行います。

  • パブリケーションを手動で作成します。
  • publication.autocreate.mode を別の値に更新します。
  • データベース ユーザーに SUPERUSER(Cloud SQL では cloudsqlsuperuser)を付与します。ただし、これらのロールはデータベースの権限チェックをバイパスするため、通常はこのオプションはおすすめしません。

次のステップ