בקטע הזה מפורטות הנחיות לפתרון בעיות נפוצות שמתרחשות במהלך השימוש במחבר Debezium PostgreSQL Source, כולל סוגי המחברים הבאים:
יצירת התמונה נכשלה
אם למשתמש אין הרשאת USAGE בסכימה של הטבלה, המחבר לא יכול ליצור את התמונה הראשונית ומופיעה השגיאה הבאה:
Snapshotting of table SCHEMA.TABLE failed
כדי לפתור את הבעיה, משתמשים בפקודת ה-SQL GRANT כדי להעניק את ההרשאה 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.mode ל-all_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)
השגיאה הזו מתרחשת כשמשתמש מסד הנתונים הוא לא משתמש-על (או שאין לו את התפקיד cloudsqlsuperuser ב-Cloud SQL), שנדרש כדי ליצור פרסום באמצעות FOR ALL TABLES. כדי לפתור את השגיאה הזו, מבצעים אחת מהפעולות הבאות:
- יוצרים את אתר החדשות באופן ידני.
- מעדכנים את הערך של
publication.autocreate.mode. - מעניקים את ההרשאה
SUPERUSER(אוcloudsqlsuperuserב-Cloud SQL) למשתמש של מסד הנתונים. עם זאת, בדרך כלל לא מומלץ להשתמש באפשרות הזו, כי התפקידים האלה עוקפים את בדיקות ההרשאות במסד הנתונים.
המאמרים הבאים
- פתרון בעיות בחיבור של אשכולות ומחברים
- יצירת מחבר של מקור Cloud SQL ל-PostgreSQL
- יצירת מחבר Generic PostgreSQL Source