如何在MariaDB中创建联邦表而不指定列

如何在MariaDB中创建联邦表而不指定列,mariadb,federated-table,Mariadb,Federated Table,我试图使用MariaDB 10.1.12的联邦引擎创建基于远程数据库中的表的表。按照关于如何使用FederatedX实现的说明,在databasedb1中,我创建了一个表作为 CREATE TABLE test_table ( id int(20) NOT NULL auto_increment, name varchar(32) NOT NULL default '', other int(20) NOT NULL default '0', PRIMARY KEY

我试图使用MariaDB 10.1.12的联邦引擎创建基于远程数据库中的表的表。按照关于如何使用FederatedX实现的说明,在database
db1
中,我创建了一个表作为

CREATE TABLE test_table (
  id     int(20) NOT NULL auto_increment,
  name   varchar(32) NOT NULL default '',
  other  int(20) NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY name (name),
  KEY other_key (other))
DEFAULT CHARSET=latin1;
现在,当我想在第二个数据库
db2
中使用联邦引擎查看此表时,我可以

CREATE TABLE test_table (
  id     int(20) NOT NULL auto_increment,
  name   varchar(32) NOT NULL default '',
  other  int(20) NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY name (name),
  KEY other_key (other)
) ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://user_x:pass_y@localhost/db1/test_table';
所有这些都是从MariaDB文档中复制的,并且工作良好。但是,如果我尝试在不显式复制表结构定义的情况下创建表-同一文档中给出了一个示例

CREATE TABLE test_table ENGINE=FEDERATED DEFAULT CHARSET=latin1
CONNECTION='mysql://user_x:pass_y@localhost/db1/test_table';
MariaDB的响应是一个错误

ERROR 1113 (42000): A table must have at least 1 column

我是否遗漏了什么,或者在不指定单个列的情况下无法使用联邦表?

在Ubuntu 14.04上标准安装MariaDB后,旧的联邦引擎处于活动状态,而不是新的FederatedX变体。只有后者支持自动发现列。为了纠正这一点,我采取了以下步骤:

uninstall soname 'ha_federated';
删除联邦插件。服务器重新启动后,将加载正确的服务器

install plugin federated soname 'ha_federatedx';
这将加载支持自动发现列的新FederatedX实现。要查看已安装的发动机,可以使用

show engines;
如果全部正确,则输出中应该有以下行:

| FEDERATED          | YES     | FederatedX pluggable storage engine |

我在mariadb 10.0.23上的CONNECT引擎上也有同样的行为。文档表明10.0.2是引入自动发现的版本,所以我也不明白。只是发现表明在10.0.3版本之后自动发现有一个bug。这是在10.0.4左右写的。你的评论让我觉得这是一个真正的bug;我刚刚打开了一个。我通过编译ha_CONNECT.so,使用默认配置选项手动为发行版软件包的同一版本的mariadb使用连接引擎实现了自动发现。奇怪的是,我的发行版(fedora)没有启用ODBC,在解决这个问题时,我还修复了自动发现。