Estou tentando remover restrições de um mysqldump antes de direcioná-lo para outro banco de dados SQL. O Mysqldump gera tabelas parecidas com 1 ou mais restrições:
CREATE TABLE 'SOME_TBL' (
'ID' bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'blah',
/* ... */
PRIMARY KEY ('ID') USING BTREE,
CONSTRAINT 'SOME_TBL_FC1' FOREIGN KEY ('SOME_FIELD') REFERENCES 'SOME_OTHER_TBL' ('ID'),
CONSTRAINT 'SOME_TBL_FC2' FOREIGN KEY ('ANOTHER_FIELD') REFERENCES 'ANOTHER_TBL' ('ID')
) ENGINE=InnoDB AUTO_INCREMENT=3845453 DEFAULT CHARSET=utf8 COMMENT='data lives here';
Eu posso excluir as linhas de restrição assim:
mysqldump --source-database \
| sed -E '/^ *CONSTRAINT/d' \
| mysql --result-database
Mas então eu fico com vírgulas à direita, por exemplo:
CREATE TABLE 'SOME_TBL' (
'ID' bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'blah',
/* ... */
PRIMARY KEY ('ID') USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=3845453 DEFAULT CHARSET=utf8 COMMENT='data lives here';
... qual SQL não gosta. (observe a vírgula depois de "BTREE" acima). Note que eu não quero remover as vírgulas à direita all , apenas as vírgulas à direita que aparecem antes de uma nova linha e paren close (algo como ,\n)
)
Qual é a maneira mais fácil de excluir essas vírgulas à direita e as linhas de restrição no meio do fluxo? Observe que os dumps podem ter vários milhares de megabytes, portanto, não posso simplesmente fazer o slurp do arquivo inteiro em perl ou algo assim; Eu quero ser capaz de fazer isso como parte de um pipeline.
Eu provavelmente poderia executar algum SQL depois que usa INFORMATION_SCHEMA para excluir as restrições, mas eu estou querendo saber se há uma maneira mais elegante de fazer isso usando apenas ferramentas de processamento de texto?