TODO list for Bucardo
=====================

Version 5
---------

* Fix 'error loop' escaping bug from mailing list
  https://github.com/bucardo/bucardo/issues/13

* Fix quoting bug reported by Sean M. Pappalardo
  https://github.com/bucardo/bucardo/issues/14

* Note minimum Postgres version requirements (source and target)
  https://github.com/bucardo/bucardo/issues/18

* Fix bug with checking wrong tables in databases on startup reported to list

* Get customcode working, with tests
  https://github.com/bucardo/bucardo/issues/20

* See about the VAC daemon cleaning up pg_listener

* Make sure all outstanding mailing list questions are handled.


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 skipping of some or all of the initial schema checks; currenlty
  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.