0

当我这样做时,import foreign schema constructor from server mysql_svr into mysql_fdw;我得到:

ERROR:  type "set" does not exist
LINE 6:   type set NOT NULL,
               ^
QUERY:  CREATE FOREIGN TABLE search_requests (
  id int NOT NULL,
  ctime timestamp NOT NULL,
  site_id int NOT NULL,
  query_id int NOT NULL,
  type set NOT NULL,
  page smallint NOT NULL
) SERVER mysql_svr OPTIONS (dbname 'constructor', table_name 'search_requests');

CONTEXT:  importing foreign table "search_requests"

源表是:

CREATE TABLE `search_requests` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `site_id` int(11) NOT NULL,
  `query_id` int(10) unsigned NOT NULL,
  `type` set('content','catalog','gallery') NOT NULL,
  `page` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `site` (`site_id`)
) ENGINE=InnoDB AUTO_INCREMENT=391 DEFAULT CHARSET=utf8

我可以让 IMPORT FOREIGN SCHEMA 生成的 SQL 进行所有修复并手动运行它吗?

4

1 回答 1

2

API 没有提到任何类似的东西(至少在 SQL 级别上),但是您可以在没有显式表的情况下导入模式。你可以试试:

IMPORT FOREIGN SCHEMA constructor
  EXCEPT (search_requests)
  FROM SERVER mysql_svr
  INTO mysql_fdw

导入后,您可以尝试为每个排除的表 f.ex. 编写映射:

CREATE FOREIGN TABLE search_requests (
  id int NOT NULL,
  ctime timestamp NOT NULL,
  site_id int NOT NULL,
  query_id int NOT NULL,
  type text NOT NULL,
  page smallint NOT NULL
) SERVER mysql_svr OPTIONS (dbname 'constructor', table_name 'search_requests');

注意:我不确定该text类型是否适合 MySQL 的set类型。set在 MySQL 中通常意味着糟糕的规范化(如 PostgreSQL 中的数组列类型),如果您可以更改外表,则应该这样做。

此外,这似乎是mysql_fdw错误;如果是这种情况,您应该在他们的错误跟踪系统中报告。

于 2016-04-22T12:12:46.650 回答