Here are some review comments for v68-0001. ~~~
1. Commit message "When a publication is defined or modified, rows that don't satisfy an optional WHERE clause will be filtered out." That wording seems strange to me - it sounds like the filtering takes place at the point of creating/altering. Suggest reword something like: "When a publication is defined or modified, an optional WHERE clause can be specified. Rows that don't satisfy this WHERE clause will be filtered out." ~~~ 2. Commit message "The WHERE clause allows simple expressions that don't have user-defined functions, operators..." Suggest adding the word ONLY: "The WHERE clause only allows simple expressions that don't have user-defined functions, operators..." ~~~ 3. src/backend/replication/pgoutput/pgoutput.c - pgoutput_row_filter_init + /* If no filter found, clean up the memory and return */ + if (!has_filter) + { + if (entry->cache_expr_cxt != NULL) + MemoryContextDelete(entry->cache_expr_cxt); + + entry->exprstate_valid = true; + return; + } IMO this should be refactored to have if/else, so the function has just a single point of return and a single point where the exprstate_valid is set. e.g. if (!has_filter) { /* If no filter found, clean up the memory and return */ ... } else { /* Create or reset the memory context for row filters */ ... /* * Now all the filters for all pubactions are known. Combine them when * their pubactions are same. ... } entry->exprstate_valid = true; ~~~ 4. src/backend/replication/pgoutput/pgoutput.c - pgoutput_row_filter comment + /* + * We need this map to avoid relying on changes in ReorderBufferChangeType + * enum. + */ + static int map_changetype_pubaction[] = { + [REORDER_BUFFER_CHANGE_INSERT] = PUBACTION_INSERT, + [REORDER_BUFFER_CHANGE_UPDATE] = PUBACTION_UPDATE, + [REORDER_BUFFER_CHANGE_DELETE] = PUBACTION_DELETE + }; Suggest rewording comment and remove the double-spacing: BEFORE: "We need this map to avoid relying on changes in ReorderBufferChangeType enum." AFTER: "We need this map to avoid relying on ReorderBufferChangeType enums having specific values." ~~~ 5. DEBUG level 3 I found there are 3 debug logs in this patch and they all have DEBUG3 level. IMO it is probably OK as-is, but just a comparison I noticed that the most detailed logging for logical replication worker.c was DEBUG2. Perhaps row-filter patch should be using DEBUG2 also? ------ Kind Regards, Peter Smith. Fujitsu Australia