Postgree Auto Numeração



  • Boa tarde, alguém poderia me informar como devo proceder para fazer uma auto numeração no banco de dados Postgree através do próprio Maker, ou seja que toda vez que eu solicitar um novo cadastro, que ele gere um ID automaticamente e sequencial.


  • [quote="Cabeça"]Boa tarde, alguém poderia me informar como devo proceder para fazer uma auto numeração no banco de dados Postgree através do próprio Maker, ou seja que toda vez que eu solicitar um novo cadastro, que ele gere um ID automaticamente e sequencial.[/quote] Use o tipo de dado "Serial" do PostgreSQL.


  • Ok, porem a base de dados foi migrada de um outro banco de dados para o postgree, quando eu tento alterar o tipo de campo que atualmente é integer para Serial, não tenho essa opção no PgAdmin. como devo proceder nesse caso?


  • Existem dados na tabela ?


  • Sim. existem valores inteiros.


  • Dê uma pesquisada na internet então em como você fazer a alteração deste tipo de dado (integer, que provavelmente é a pk) par ao serial.

    Pesquisando rapidamente no google, encontrei isso:
    https://groups.google.com/forum/?fromgroups#!topic/comp.databases.postgresql/x-kld8q_6c4
    E isto:
    http://archives.postgresql.org/pgsql-general/2006-09/msg01267.php
    -------
    Se você quer uma solução em Maker, você pode criar uma sequence e ir obtendo o valor dela com a função "Obter próximo valor de uma sequencia" e usar este valor como valor para o registro que você vai inserir.

    Boa Sorte.


  • Obrigado irei tentar.


  • teria como você me mandar um modelo de fluxo ou referencia de como fazer um com a função "próximo valor de uma sequencia", grato


  • O campo do tipo "Serial" no Postgres na verdade é um campo Inteiro com uma sequence associada a ele. Quando você cria um campo deste tipo, automaticamente é criada a sequence relativa no banco de dados. Você poderia criar as sequences e associá-las manualmente ao campo desejado. Pra ficar mais fácil de entender, utilize uma base de testes e crie uma tabela qualquer com um campo do tipo Serial. Depois verifique que o tipo do campo criado será Inteiro, e terá uma valor default pra ele.
    Aí é só você verificar nas sequences criadas no banco de dados, copiar o script de uma delas e criar as novas, lembrando sempre de associá-la a um campo no seu valor padrão.


  • Felipe, fiz esse procedimento, porem gera um erro no banco e não funciona, pois nessa coluna que seria auto numerada, já tem valores que vieram do banco de dados do cliente, acredito que a unica solução seria realmente usar algum fluxo, usando a rotina "Próximo valor de sequencia" porém nesse caso já fiz vários modelos de fluxo e eles não completaram a sequencia, ou seja, o ultimo código no banco de dados é o 7, então ao clicar em inserir teria que ter um resultado de numero 8, e ele não esta carregando, casso tenha algum modelo de fluxo ai com essa rotina, agradeceria se mandasse.

    vlw
    [quote="Felipe Ramos"]O campo do tipo "Serial" no Postgres na verdade é um campo Inteiro com uma sequence associada a ele. Quando você cria um campo deste tipo, automaticamente é criada a sequence relativa no banco de dados. Você poderia criar as sequences e associá-las manualmente ao campo desejado. Pra ficar mais fácil de entender, utilize uma base de testes e crie uma tabela qualquer com um campo do tipo Serial. Depois verifique que o tipo do campo criado será Inteiro, e terá uma valor default pra ele.
    Aí é só você verificar nas sequences criadas no banco de dados, copiar o script de uma delas e criar as novas, lembrando sempre de associá-la a um campo no seu valor padrão.[/quote]


  • É porque você precisa posicionar o valor da sequence no máximo valor existente para o campo no banco. Quando a sequence é criada, ela é definida com o valor 1 (lembre-se que ela incrementa 1 no seu valor). Ou seja, faça um select max no campo desejado, depois visualiaze a sequence pelo PgAdmin, clique 2 vezes nela e no campo "current value" preencha com o valor retornado pelo max + 1.


  • Você teria algum exemplo? para enviar. Ou se preferir, posso te mandar o form com o fluxo.


  • Cara, o procedimento que eu indiquei é feito no banco de dados, não é no Maker não.


  • Ok, irei verificar aqui.
    [quote="Felipe Ramos"]Cara, o procedimento que eu indiquei é feito no banco de dados, não é no Maker não.[/quote]


  • não tem como fazer esse procedimento através de um fluxo não? algo que consulte o ultimo valor do banco, acrescente +1.
    [quote="Felipe Ramos"]É porque você precisa posicionar o valor da sequence no máximo valor existente para o campo no banco. Quando a sequence é criada, ela é definida com o valor 1 (lembre-se que ela incrementa 1 no seu valor). Ou seja, faça um select max no campo desejado, depois visualiaze a sequence pelo PgAdmin, clique 2 vezes nela e no campo "current value" preencha com o valor retornado pelo max + 1.[/quote]


  • Sim. Você pode fazer um Select Max (com a função "Abrir Consulta"), depois obtém o valor do Max (com a função "Campo") e soma 1 (com função "Soma"). Depois usa a função "Alterar Campo" ou "Alterar Valor do Componente" para passar esse resultado para o campo desejado.


  • da uma olhada em como estou fazendo:
    ginfor.net/maker/cargo_funcionarios.rar
    ai é o anexo do form e do fluxo.
    [quote="Felipe Ramos"]Sim. Você pode fazer um Select Max (com a função "Abrir Consulta"), depois obtém o valor do Max (com a função "Campo") e soma 1 (com função "Soma"). Depois usa a função "Alterar Campo" ou "Alterar Valor do Componente" para passar esse resultado para o campo desejado.[/quote]

Log in to reply