Closed fiote closed 4 years ago
Então, também fiquei na dúvida pq durante a aula funcionou e na base de cógido do template não... 🤔🤔 Eu setei as mesmas versões do typeorm e client pg... Conseguiriam explicar? (só de curiosidade mesmo, o erro foi resolvido de fato)
ref: https://github.com/typeorm/typeorm/issues/3009
@diego3g @josepholiveira
Talvez, após criar os modelos com o typeorm por default e debaixo dos panos ele verifica a estratégia de utilização para geração do id e caso seja 'uuid' ele por si só roda o comando que tivemos que rodar. x)
Faala @fiote e @tupizz, beleza?
Então, entendo essa dúvida de vocês, mas esse erro pode acabar acontecendo por alguns motivos diferentes, seja algum problema no container do docker, ou por exemplo em alguns casos configurando corretamente a Model já deve resolver o problema.
Porque não criamos uma área de problemas frequentes? Justamente porque esse é um problema que não vai acontecer exatamente de uma forma igual para todo mundo e no fórum, como o @tupizz mandou ali, já existem algumas soluções para isso de outras pessoas que passaram pelo mesmo problema.
Sobre a parte de "Direto pro código", vale a pena lembrar que programação não é só código, muitas vezes passamos por diversos tipos de problemas, seja esse por conta da forma que escrevemos o código ou não, e temos que sempre lembrar que nós como programadores não só criamos código, mas resolvemos problemas, e passar por esse tipo de problema é totalmente normal.
Os desafios tem totalmente o objetivo de desafiar, como diz o nome. Acreditamos que o template já facilita esse desafio bastante, mas a parte principal do desafio é aprender a lidar com os problemas e resolve-los, e um processo importante disso é pesquisar, ajudar ou receber ajuda.
Espero que tenham entendido, e lembrem-se que sempre que tiverem uma dúvida técnica, podem enviar diretamente no fórum, pois nosso atendimento é exclusivo por lá para esse tipo de dúvida. E para dúvidas não técnicas optem pelo discord ou pelo e-mail oi@rocketseat.com.br.
Abraços!
Tente adicionar a linha
await queryRunner.query(
CREATE EXTENSION IF NOT EXISTS "uuid-ossp");
na primeira migration. Isso fará com que o postgres instale o modulo caso ele não tenha.
Eu resolvi da seguinte forma: Fui no DBeaver, no banco de dados que eu criei, com o botão direito do mouse em cima do símbolo do Banco de dados existe a opção create, acompanhando as opções que se abrem tem a opção extension, uma das últimas opçoes lá dentro é a tão procurada uuuid-ossp, pronto, é só habilitar essa opção. Depois que dermos um npm run typeorm migration:run no vscode, ele vai criar nossas tabelas. Quando voltarmos para verificarmos se as tabelas foram criadas é importante dar um refresh.
Enfrentei o mesmo problema e resolvi com a dica do @nennogabriel e desse link no Stack Overflow 👍
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"');
.
.
.
Esse problema ocorreu comigo quando tentei rodar as migrations sem ser um super usuário. Utilizei o docker para criar o container, criei um usuário com nome customizado, assim perdendo o poder de super usuário. Depois recriei container sem definir um nome para o usuário (o padrão é "postgres"), só defini a senha, então deu tudo certo em rodar as migrations.
Eu resolvi da seguinte forma: Fui no DBeaver, no banco de dados que eu criei, com o botão direito do mouse em cima do símbolo do Banco de dados existe a opção create, acompanhando as opções que se abrem tem a opção extension, uma das últimas opçoes lá dentro é a tão procurada uuuid-ossp, pronto, é só habilitar essa opção. Depois que dermos um npm run typeorm migration:run no vscode, ele vai criar nossas tabelas. Quando voltarmos para verificarmos se as tabelas foram criadas é importante dar um refresh.
Muito obrigado @AllanFont3s Eu estava com esse mesmo problema e deu certo aqui seguindo sua solução.
@joaopaulu boa dica, resolver memo!!!
SOLVED Resolvido com a dica do @AllanFont3s
Eu resolvi da seguinte forma: Fui no DBeaver, no banco de dados que eu criei, com o botão direito do mouse em cima do símbolo do Banco de dados existe a opção create, acompanhando as opções que se abrem tem a opção extension, uma das últimas opçoes lá dentro é a tão procurada uuuid-ossp, pronto, é só habilitar essa opção. Depois que dermos um npm run typeorm migration:run no vscode, ele vai criar nossas tabelas. Quando voltarmos para verificarmos se as tabelas foram criadas é importante dar um refresh.
Povo, a única solução aceitável aqui é a do @nennogabriel.
Talvez em projetos informais seja aceito usar uma IDE para instalar extensões, mas num time de desenvolvimento de software isso é considerado gambiarra.
Geralmente esse problema está associado ao @PrimaryGeneratedColumn(), da uma olhada se você setou no decorator o uuid, ex: @PrimaryGeneratedColumn('uuid').
Resolvi o problema simplesmente adicionando os decorators nos models
Resolvi tambem da mesma forma que o colega cacpmw. Basta completar as models com os decorators.
Resolvi o problema simplesmente adicionando os decorators nos models
Também consegui resolver colocando os decorators no model, além de também ter ativado a extensão uuid-ossp.
Eu resolvi da seguinte forma: Fui no DBeaver, no banco de dados que eu criei, com o botão direito do mouse em cima do símbolo do Banco de dados existe a opção create, acompanhando as opções que se abrem tem a opção extension, uma das últimas opçoes lá dentro é a tão procurada uuuid-ossp, pronto, é só habilitar essa opção. Depois que dermos um npm run typeorm migration:run no vscode, ele vai criar nossas tabelas. Quando voltarmos para verificarmos se as tabelas foram criadas é importante dar um refresh.
Resolvido com essa solução! Vlw, rapaz!
Legal a ideia de resolver o problema inserindo a query na primeira migration, mas acho que isso quebra um pouco da função do TypeORM que é ser o mais abstrato possível, independente de banco de dados. Neste caso a solução mais adequada é habilitar o uuid-ossp manualmente no banco de dados.
Também consegui resolver esse problema, apenas adicionando os decorators nos models.
Tente adicionar a linha
await queryRunner.query(
CREATE EXTENSION IF NOT EXISTS "uuid-ossp");
na primeira migration. Isso fará com que o postgres instale o modulo caso ele não tenha.
Boa, resolveu pra mim, obrigado!
Tente adicionar a linha
await queryRunner.query(
CREATE EXTENSION IF NOT EXISTS "uuid-ossp");
na primeira migration. Isso fará com que o postgres instale o modulo caso ele não tenha.
funcionou
Show resolvi também adicionando pelo DBeaver adicionando a extensão. Muito obrigado!
//o meu ficou assim e funcionou....
import { MigrationInterface, QueryRunner, Table } from "typeorm";
export default class CreateTableTransactions1611790430027 implements MigrationInterface {
public async up(queryRunner: QueryRunner): PromiseCREATE EXTENSION IF NOT EXISTS "uuid-ossp"
);
await queryRunner.createTable(
new Table({
name: 'transactions',
columns: [
{
name: 'id',
type: 'uuid',
isPrimary: true,
generationStrategy: 'uuid',
default: 'uuid_generate_v4()'
},
{
name: 'title',
type: 'varchar'
},
{
name: 'type',
type: 'varchar',
},
{
name: 'value',
type: 'decimal',
precision: 10,
scale: 2
},
{
name: 'created_at',
type: 'timestamp',
default: 'now()',
},
{
name: 'updated_at',
type: 'timestamp',
default: 'now()',
}
]
})
);
}
public async down(queryRunner: QueryRunner): Promise
A dica do @AllanFont3s resolveu por aqui. Muito obrigado.
Eu resolvi da seguinte forma: Fui no DBeaver, no banco de dados que eu criei, com o botão direito do mouse em cima do símbolo do Banco de dados existe a opção create, acompanhando as opções que se abrem tem a opção extension, uma das últimas opçoes lá dentro é a tão procurada uuuid-ossp, pronto, é só habilitar essa opção. Depois que dermos um npm run typeorm migration:run no vscode, ele vai criar nossas tabelas. Quando voltarmos para verificarmos se as tabelas foram criadas é importante dar um refresh.
Ao usar uuid_generate_v4 no default das colunas primárias das migrations do postgre, esse erro (Function uuid_generate_v4() does not exists) acontece e impede que as migrations sejam executadas.
No discord me passaram a solução, que é simplesmente executar CREATE EXTENSION IF NOT EXISTS "uuid-ossp" lá pelo DBeaver no banco gostack_desafio06 que a gente cria (essa parte de criar o banco faz parte do passo-a-passo).
Só que seguindo o fluxo do curso, a gente faz esse desafio do upload logo depois da aula de backend do gobarber. E na aula do gobarber esse step por algum motivo não é necessário então o aluno fica achando que tem algum bug acontecendo. Deveria 'simplesmente funcionar'.
Acho que seria interessante criar uma seção 'problemas frequentes' ou algo assim na descrição desse desafio com essa solução. Eu entendo que 'configurar ambiente' faz parte das tarefas do dev, mas a partir do momento que vocês estão disponibilizando um template pra ser clonado como material do curso (e até agora o yarn install sempre deixou o ambiente pronto pra ser usado), acho válido assumir que não vamos perder muito tempo buscando esse tipo de solução no stackoverflow ou algo do tipo, e que vamos poder simplesmente sentar e 'bora codar', hehe