2016-04-22 79 views
0

当我做import foreign schema constructor from server mysql_svr into mysql_fdw;我得到:如何获取由IMPORT FOREIGN SCHEMA生成的SQL?

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 

可能我得到进口外国模式生成SQL让所有修补程序和手动运行呢?

回答

1

该API没有提及任何类似的东西(至少在SQL级别),但你可以import the schema without explicit tables。你可以尝试:

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错误;如果是这样的话,你应该在他们的bug跟踪系统中报告。

+0

mysql_fdw尝试做'DO $$ BEGIN IF NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type WHERE typname ='type_t')然后CREATE TYPE type_t AS enum('content','catalog','gallery');万一; END $$;'但是它应该使用'type_t'而不是'set'。是的,它看起来像一个错误,但我不确定。 –

+0

@EugenKonkov然后'type_t'就是这个类型的*枚举部分*。 PostgreSQL根本没有'set'类型,最接近的将是'type_t []'('type_t'枚举的一个数组,可能允许重复,不像'set'),但是我不确定外国包装可以处理这种映射。我最好的选择是保留“文本”(尽管我无法测试自己);与此同时,您可以将设置读为逗号分隔值。我不确定''set'是否受到'mysql_fdw'的支持(因为它在PostgreSQL中没有直接的对)。 – pozs