Desenvolver um aplicativo implica em ter um bom banco de dados, mas responder rapidamente a uma migra\u00e7\u00e3o estrutural \u00e9 mais um pesadelo do que uma noite bem dormida.<\/p>\n
Dentre as ferramentas que o YeAPF<\/strong> disp\u00f5e se encontra o ydbmigrate<\/em>.<\/p>\n Esta ferramenta nos permite exportar e importar dados de varias fontes dentro do universo de banco de dados reconhecidos pelo YeAPF<\/strong>, ou seja: Firebird\/Interbase, MySQL e PostgreSQL.<\/p>\n A migra\u00e7\u00e3o de dados de um banco de dados para outro (de diferente ou mesma natureza) \u00e9 feita sempre usando modelos intermedi\u00e1rios.\u00a0 Por exemplo tabela firebird -> arquivo csv -> tabela mysql<\/p>\n Um exemplo simples disso \u00e9 feito nos seguintes dois passos (supondo que o banco original<\/em> cont\u00eam uma tabela chamada minhaTabela<\/em> com dados e o banco de dados copia<\/em> est\u00e1 vazio)<\/p>\n Exportando<\/strong><\/p>\n Isso vai produzir um arquivo chamado minhaTabela.csv com as colunas e os dados da tabela original.\u00a0 De mais est\u00e1 dizer que essa tabela pode ser aberta com uma planilha como LibreOffice.<\/p>\n Importando<\/strong><\/p>\n Pronto, com este segundo passo, agora existe uma tabela chamada minhaTabela<\/em> no banco destino<\/em> contendo a estrutura e os dados que haviam no arquivo minhaTabela.csv.<\/p>\n Repare, por\u00e9m, que a estrutura que o ydbmigrate<\/em> criou no banco destino, n\u00e3o \u00e9 obrigatoriamente id\u00eantica \u00e0 original.\u00a0 Isso \u00e9 assim porque na importa\u00e7\u00e3o o ydbmigrate<\/em> calcula a menor estrutura necess\u00e1ria para conter os dados repassados.\u00a0 Ent\u00e3o, caso queira enxugar a sua estrutura de dados, ydbmigrate<\/em> j\u00e1 resolve boa parte do servi\u00e7o.<\/p>\n Mantendo a estrutura<\/strong><\/p>\n Digamos que voc\u00ea quer conservar a estrutura original. O ydbmigrate<\/em> permite criar um script sql contendo as instru\u00e7\u00f5es de cria\u00e7\u00e3o da tabela mas, n\u00e3o se atendo a estruturas que s\u00e3o particulares a cada banco.<\/p>\n Mesmo este trabalho estando em andamento, j\u00e1 \u00e9 poss\u00edvel migrar boa parte das estruturas das tabelas usando o ydbmigrate<\/em>.<\/p>\n Uma vez feito isto, voc\u00ea ter\u00e1 um arquivo minhaTabela.sql na pasta local que pode ser utilizado para criar a estrutura no banco destino usando a ferramenta da sua prefer\u00eancia.<\/p>\n Finalmente, usamos o ydbmigrate<\/em> para importar a tabela sem mexer na estrutura<\/p>\n Uma olhada nos par\u00e2metros que o ydbmigrate<\/em> nos oferece, nos permite ver que h\u00e1 outras coisas que podemos fazer como limpar a tabela antes de importar (–clean) ou n\u00e3o importar dados (–dontImportData) ou n\u00e3o eliminar as colunas vazias (–dontDeleteEmptyFields) ou recriar a tabela com o algoritmo do ydbmigrate<\/em> mesmo que a tabela j\u00e1 exista (–forceCreateTable)<\/p>\n Bom, \u00e9 por essas e por outras que usamos ydbmigrate<\/em> para migrar tabelas<\/p>\n <\/p>\n","protected":false},"excerpt":{"rendered":" Desenvolver um aplicativo implica em ter um bom banco de dados, mas responder rapidamente a uma migra\u00e7\u00e3o estrutural \u00e9 mais um pesadelo do que uma noite bem dormida. Dentre as ferramentas que o YeAPF disp\u00f5e se encontra o ydbmigrate. Esta ferramenta nos permite exportar e importar dados de varias fontes dentro do universo de banco […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[],"tags":[81,82,83,84,85,86],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-5","jetpack-related-posts":[{"id":25,"url":"http:\/\/www.yeapf.com\/wp\/?p=25","url_meta":{"origin":5,"position":0},"title":"Primeiros passos com YeAPF","date":"fevereiro 22, 2014","format":false,"excerpt":"Tive oportunidade de ver minha irm\u00e3 mais nova andar sozinha pela primeira vez e nunca mais esqueci da experi\u00eancia. \u00a0Anos depois naceram os filhos e o impacto \u00e9 tremendo. Brinco com quem programa usando YeAPF de que s\u00e3o meus filhos, carinhosamente. Por isso que os primeiros passos s\u00e3o importantissimos para\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":184,"url":"http:\/\/www.yeapf.com\/wp\/?p=184","url_meta":{"origin":5,"position":1},"title":"Exemplo - web01 - OnePage YeAPF Web Application","date":"dezembro 26, 2014","format":false,"excerpt":"Esta \u00e9 uma das continua\u00e7\u00f5es deste artigo. Por que criar aplicativos mono p\u00e1gina? Bom, a grande virtude de um aplicativo mono p\u00e1gina \u00e9 que tudo o que voc\u00ea precisar est\u00e1 pronto assim que o usu\u00e1rio carregou a p\u00e1gina inicial e caso sejam necess\u00e1rias mais p\u00e1ginas, formul\u00e1rios, tabelas elas tamb\u00e9m podem\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2019\/05\/office-932926_1920.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":501,"url":"http:\/\/www.yeapf.com\/wp\/?p=501","url_meta":{"origin":5,"position":2},"title":"Gerando dados ficticios para testes","date":"dezembro 12, 2018","format":false,"excerpt":"Convenhamos que nem sempre \u00e9 f\u00e1cil gerar uma boa quantidade de dados como para testar um sistema apenas com o uso da imagina\u00e7\u00e3o. N\u00e3o que a imagina\u00e7\u00e3o n\u00e3o seja fertil, mas sim que cansa andar imaginando apenas sobre um \u00fanico assunto. Faz parte da natureza da imagina\u00e7\u00e3o interessar-se por coisas\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":91,"url":"http:\/\/www.yeapf.com\/wp\/?p=91","url_meta":{"origin":5,"position":3},"title":"Aplicativos mono p\u00e1gina","date":"mar\u00e7o 14, 2014","format":false,"excerpt":"Aplicativos que usam s\u00f3 uma p\u00e1gina t\u00eam um lugar assegurado no desenvolvimento de software atual e futuro. Bem feitos s\u00e3o elegantes e f\u00e1ceis de manter. Tamb\u00e9m s\u00e3o uma m\u00e3o na roda na hora de fazer um aplicativo que funcione tanto em desktop como em mobile. Para construirmos um aplicativo com\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":455,"url":"http:\/\/www.yeapf.com\/wp\/?p=455","url_meta":{"origin":5,"position":4},"title":"Como instalar YeAPF?","date":"agosto 3, 2018","format":false,"excerpt":"Voc\u00ea n\u00e3o precisa instalar YeAPF. O que sim \u00e9 bom ter instalado s\u00e3o as ferramentas dele. Mas antes disso, \u00e9 bom deixar claro como funciona ele sem instalar. A todos os efeitos, vamos supor que voc\u00ea fez download da \u00faltima vers\u00e3o do YeAPF e o colocou na pasta ~\/Downloads\/YeAPF\/ e\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":392,"url":"http:\/\/www.yeapf.com\/wp\/?p=392","url_meta":{"origin":5,"position":5},"title":"Gerando um formul\u00e1rio para CRUD a partir de um select","date":"abril 30, 2018","format":false,"excerpt":"Esses dias me deparei com a necessidade de produzir um formul\u00e1rio cujos campos n\u00e3o s\u00e3o produto de uma tabela \u00fanica mas sim de um\u00a0left join.\u00a0 Para uma tabela \u00fanica, o comando \u00e9 o seguinte ~\/www\/YeAPF\/tools\/ydbcreateform --db 192.168.56.250:nossoConsultorio_teste --user esteban --pass senha --type mysqli --table clinicas --name \"clinicas\" Ai modifiquei o\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/5"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5"}],"version-history":[{"count":3,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":8,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/5\/revisions\/8"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}ydbmigrate --db localhost:\/bd\/original.fdb --user SYSDBA --pass MASTERKEY --type firebird --table minhaTabela --export minhaTabela<\/pre>\n
ydbmigrate --db localhost:destino --user root --pass minhaSenha --type mysql --table minhaTabela --import minhaTabela<\/pre>\n
ydbmigrate --db localhost:\/bd\/original.fdb --user SYSDBA --pass MASTERKEY --type firebird --table minhaTabela --table-structure-sql > minhaTabela.sql<\/pre>\n
ydbmigrate --db localhost:destino --user root --pass minhaSenha --type mysql --table minhaTabela --import minhaTabela --dontModifyStructure<\/pre>\n