Manually specifying key columns
rubyrep can only scan, sync or replicate tables whose records can be identified by unique keys. Those keys can be single columns or combinations of multiple columns.
By default, rubyrep will using the primary key columns of the according table. If a table does not have a primary key, it can be manually specified using
:key
option or:auto_key_limit
option
:key option
Usage examples:
...
config.include_tables 'articles', :key => 'id'
config.include_tables 'articles_tags', :key => ['article_id', 'tag_id']
...
:auto_key_limit option
If you have many e. g. many-to-many relationship tables, all of them without primary key, it might be troublesome to specify the key columns manually.
:auto_key_limit
is a convenience option to address this problem.
It basically says, that if a table
- has no primary key and
- not more than the specified number of columns
then rubyrep shall automatically consider the combination of all columns of the table as unique.
E. g. all of the options in the following example are equivalent (but with the :auto_key_limit
versions applying to potentially more than one table):
...
# applies to all tables with not more than 2 columns and
# not having a primary key
config.options[:auto_key_limit] = 2
# like above, but only for tables whose name contains an underscore
config.add_table_options /_/, :auto_key_limit => 2
# specify the key columns for this table only
config.include_tables 'articles_tags', :key => ['article_id', 'tag_id']
...