Com hen vist en un post anterior, per tal de configurar el FDW cal generar els scripts de les taules. Amb aquesta consulta es pot generar l’script de creació de totes les taules d’una base de dades MySQL o Mariadb.
SELECT case when ordinal_position=1 then concat('drop foreign table if exists ',c.table_schema,'_' ,c.table_name,';') else '' end AS strdrop,
concat(case when ordinal_position=1 then concat('create FOREIGN TABLE ',c.table_schema,'_' ,c.table_name, '(') else '' end,
concat(
case when ordinal_position=1 then '' else ',' end,
'"',column_name,'"'
' ',
case when data_type like '%int' then data_type
when data_type='enum' then 'varchar(500) '
when data_type='datetime' then 'timestamp '
when data_type='longtext' then 'varchar(4000) '
when data_type='mediumtext' then 'varchar(4000) '
when data_type='tinytext' then 'varchar(4000) '
when data_type='tinyint' then 'int '
when data_type='mediumint' then 'int '
when data_type='double' then 'float '
else column_type
end,
case when is_nullable='NO' then ' NOT NULL' else '' end
)
,case when ordinal_position=ma.mo then concat(')SERVER <nom_server_fdw> OPTIONS (dbname ''',c.table_schema,''', table_name ''',c.table_name,''');') else '' end) as strcreate
FROM information_schema.columns c
join (
select table_catalog, table_schema, table_name, max(ordinal_position) mo
FROM information_schema.columns
group by table_catalog, table_schema, table_name
) ma on c.table_catalog =ma.table_catalog and c.table_schema =ma.table_schema and c.table_name =ma.table_name
where c.table_schema ='wordpress'
order by c.table_catalog , c.table_schema , c.table_name, c.ordinal_position
D’aquest script cal modificar <nom_server_fdw> amb el vostre nom del servidor de FDW. El nom de la taula creada serà <nom_schema>_<nom_taula>.
L’script es basa en la taula de metadata information_schema.columns que conté informació sobre totes les taules i totes les columnes d’una base de dades. En cas de ser la 1a columna (ordinal_position=1), es genera la sentència de drop i la de create. Per a les columnes que no son la primera es separa cada columna amb una coma (‘,’). A la darrera columna (camp mo de la subconsulta) es genera la part final de configuració del server.
Cal tenir en compte que els tipus de dades de MySQL/Mariadb i PostgreSQL no són iguals i que cal aplicar una transofrmació de tipus de la columna column_type.
D’aquesta forma podem generar els scripts de totes les taules sense esforç de forma automàtica.