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.

- 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.
