Fórum Tipo Interger auto incremento #499741

30/10/2014

0

No postgre não é possivel ter um tipo de dado interger como auto incremento? somente o serial e o bigserial?
Flaviano Martins

Flaviano Martins

Responder

Posts

31/10/2014

Marisiana Battistella

É possível sim, você tem que criar uma sequence para o campo em questão...
Responder

Gostei + 0

31/10/2014

Ronaldo Lanhellas

Faça assim:

CREATE TABLE tabela1(
  id integer primary key default nextval('nome_da_sequence');
);
Responder

Gostei + 0

03/11/2014

Flaviano Martins

O que é esse sequence?

não entendi esse trecho

default nextval('nome_da_sequence');


por favor, pode me explicar?
Responder

Gostei + 0

04/11/2014

Marisiana Battistella

No PostgreSQL o funcionamento do auto-incremento é controlado por meio de uma sequence (sequências).

O recurso auto increment do PostgreSQL não é apenas uma opção na coluna e sim uma série de fatores que juntos determinam o efeito de somar um (ou n à sua chave primária).
Sequence (sequência) é um recurso do PostgreSQL utilizado para gerar números sequenciais.
Nextval é uma função do PostgreSQL utilizada para obter o próximo valor de uma sequence.
Default value (valor padrão) é um recurso disponibilizado em uma coluna para determinar um valor padrão que o campo assumirá caso nada seja informado no comando de insert.

Sequence Manipulation Functions: [url]http://translate.google.com.br/translate?hl=pt-BR&sl=en&tl=pt&u=http%3A%2F%2Fwww.postgresql.org%2Fdocs%2F9.3%2Fstatic%2Ffunctions-sequence.html&anno=2[/url]

Default values: [url]http://www.postgresql.org/docs/9.3/static/ddl-default.html[/url]
Responder

Gostei + 0

04/11/2014

Flaviano Martins

Certissimo Marisiana, obrigado.
Responder

Gostei + 0

04/11/2014

Marisiana Battistella

Por nada! =)
Responder

Gostei + 0

04/11/2014

Flaviano Martins

Voltando aqui para informar mais, fazendo pela ferramenta visual, entendi melhor, é claro que vocês me ajudaram bastante. assim que crio uma chave primaria já a aparece o sequence.
Responder

Gostei + 0

18/11/2014

Flaviano Martins

Com as minhas palavras:
Quando crio um campo serial, obrigatoriamente cria-se uma sequencia(auto-incremento) mas posso fazer separadamente, criando uma sequencia e depois uma tabela com campo diferente de serial, esse resumo, está procedente?
Responder

Gostei + 0

18/11/2014

Flaviano Martins

Por favor, me deem um retorno se realmente o que escrevi está correto! obrigado.
Responder

Gostei + 0

19/11/2014

Marisiana Battistella

Não sei se entendi exatamente o que vc quis dizer...
Mas você pode criar a tabela normal, definindo as PK e FK, e depois criar a sequence para o campo que será autoincremento.
Responder

Gostei + 0

19/11/2014

Flaviano Martins

Foi mais ou menos o que quis dizer, vi uma video aula e tentei escrever o que achei do que foi explicado e do que eu vi. o que especificamente vc não entendeu do que escrevi abaixo?

Quando crio um campo serial, obrigatoriamente cria-se uma sequencia(auto-incremento) mas posso fazer separadamente, criando uma sequencia e depois uma tabela com campo diferente de serial, esse resumo, está procedente?
Responder

Gostei + 0

19/11/2014

Fernando C

é possivel sim, claro.. de uma olhada na documentação:
http://www.postgresql.org/docs/9.2/static/sql-createsequence.html
Responder

Gostei + 0

19/11/2014

Flaviano Martins

Obrigado Fernando.
Responder

Gostei + 0

19/11/2014

Marisiana Battistella

Desculpa Flaviano, foi mal entendido meu.
Eu não conhecia esse tipo de dados serial, sempre utilizei integer, mas fui pesquisar pra ver o que é...
Você pode criar a tabela e a sequence normalmente e executar a sequence no INSERT ou então criar uma trigger para executar a sequence sempre que ocorrer uma inserção.
Responder

Gostei + 0

19/11/2014

Marisiana Battistella

Veja um exemplo de como é possível fazer no PostgreSQL:
CREATE TABLE tab_cliente
(
  idcliente integer NOT NULL,
  nomecliente character varying(50),
  CONSTRAINT pk_tabcliente PRIMARY KEY (idcliente)
);

CREATE SEQUENCE seq_idcliente
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 100
  START 1
  CACHE 1;
ALTER TABLE seq_idcliente
  OWNER TO postgres;

INSERT INTO tab_cliente (idcliente, nomecliente)
 VALUES ( nextval('seq_idcliente'), 'FULANO');
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar