Tipo Interger auto incremento

PostgreSQL

30/10/2014

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

Flaviano Martins

Curtidas 0

Respostas

Marisiana Battistella

Marisiana Battistella

30/10/2014

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

Ronaldo Lanhellas

30/10/2014

Faça assim:

CREATE TABLE tabela1(
  id integer primary key default nextval('nome_da_sequence');
);
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

O que é esse sequence?

não entendi esse trecho

default nextval('nome_da_sequence');


por favor, pode me explicar?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

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]
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

Certissimo Marisiana, obrigado.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

Por nada! =)
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

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.
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

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?
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

Por favor, me deem um retorno se realmente o que escrevi está correto! obrigado.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

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.
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

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?
GOSTEI 0
Fernando C

Fernando C

30/10/2014

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

Flaviano Martins

30/10/2014

Obrigado Fernando.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

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');
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

Vi dessa forma tambem na video aula, tanto utilizando a ferramenta grafica quanto codificando.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

30/10/2014

Vi dessa forma tambem na video aula, tanto utilizando a ferramenta grafica quanto codificando.


O "serial" é um atalho para que foi citado acima pela Marisiana.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

Como assim um atalho, Ronaldo?
Na interface gráfica do PostgreSQL tem um tipo de dados que se chama serial, vc se refere a ele?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

30/10/2014

Como assim um atalho, Ronaldo?
Na interface gráfica do PostgreSQL tem um tipo de dados que se chama serial, vc se refere a ele?


Sim, o serial é apenas um atalho. Quando você usa serial, é o mesmo que você estiver definindo "INTEGER" no campo e criando uma sequence.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

Entendido Ronaldo!
Obrigada!
GOSTEI 0
Flaviano Martins

Flaviano Martins

30/10/2014

Essa explicação sem duvidas é a melhor que encontrei Ronaldo Marisiana, assim fica mais facil de aprender! Obrigado!
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

30/10/2014

Por nada Flaviano!
GOSTEI 0
POSTAR