TODO list for Bucardo ===================== Version 5 --------- * Fix 'error loop' escaping bug from mailing list https://github.com/bucardo/bucardo/issues/13 Version 5.1 ----------- * Get Drizzle tests verified as working https://github.com/bucardo/bucardo/issues/16 * Get bucardo-report working again https://github.com/bucardo/bucardo/issues/17 Future ------ These range the gamut from wildly speculative ideas to must-have features. - Disable constraints on large data loads - Allow 'bucardo update relgroup' to work - Make sure the db can be specified for add herd, rather than relying on find_best_db_for_searching() - Use something more specific than txntime, which is not unique enough - Allow bucardo add table ... --relgroup=foo to work, or at least throw an error. - Remove the need for pl/perl entirely: put all logic into ./bucardo - Allow a new type of trigger that only indicates if a table has changed or not. Rather than storing a PK, we only note "changed". This would allow fullcopy tables inside of a sync to run or just get skipped. - Make the listen/notify system cleaner, maybe break into mcp/ctl/kid streams rather than generic 'bucardo' - Create a new "sourceonly" type what can issue deltas but not receive them - Make sure pkonly and makedelta=xx work everywhere, e.g. add/update relation/relgroup - Allow syncs to be grouped together to allow for a single kicksync notification - Allow columns A.varchar(x) and B.varchar(x+y) to be equivalent in the initial validate_sync check if B is only a target - Allow skipping of some or all of the initial schema checks; currently necessary but time consuming for large numbers of tables/servers - Throttle outgoing mail; such as the flood when things go wrong - Add column as well as table-level SQL comments to the bucardo schema - Merge bucardo_kick_%sync into a single trigger and function per table that does 1+N NOTIFYs inside of it - Allow one log file per sync - Handle the case where newly created databases do not have a public schema - Add DB2 as a target - Do table locking up front for fullcopy syncs, to reduce deadlock windows - Allow creation of schema on first fullcopy as an option - Same as above for pushdelta, but auto switch to onetimecopy after! - Remove the gotos from the pl/perlu code. - Use symlinks for long socket directories during testing, as DBD::Pg does. - Fix the insert/foreign key problem for conflict resolution. - Death-level custom code hooks - Better conflict example in test suite, uses database handles - Allow more data types for pkey on goats - Handle partitioned tables - Allow notification emails to be regex sorted, e.g. serialization warnings - Address all XXX and TODO inside Bucardo.pm - Add a pause mode - Add exception code for DELETE - I8n all messages/docs/etc. - Allow targets to be hard-linked: nobody goes on until everyone has finished - Support large objects - Support system tables (Postgres 12.0?) - Check for superuser on startup, to prevent errors that only show when a KID tries something. - Add a flag that allows for table structure checking before each sync - Make a Bucardo bundle for CPAN-like fun - Readonly slaves: trigger/rule to prevent with good message - bucardo_help() function to explain all - Handle non-orderable data types such as polygons - Put this list into a bug tracker - Consider failover strategies - Log validate_sync changes somewhere, add rollback statements - Add support for manual DDL changes - Add support for automatic DDL changes - Cascading slaves: makedelta should create infrastructure as necessary - Use polling not sleep for loop notifications - Remove large src_code sections from the kid output when they die - Force to C locale until we get i18n in place - Use C triggers for the delta stuff if we can (and time them!) - Find alternate ways for the kids to lock the tables other than $force_lock_file - Options to allow Bucardo to continue with unaffected syncs if a target is dead - Mongo: fix escaped data from COPY TO STDOUT - Flatfiles: same escaped data as above for non-PG output - Add readonly slaves: Need to design a system to make slaves optionally "readonly". This will most likely be accomplished through use of triggers. There should be a simple interface to toggle the read-only on and off per database, and perhaps per sync. Need to consider making non-tracked tables read-only as well.