Este tutorial é dirigido especialmente àqueles que vêm do MySQL para o Postgres. Dois recursos interessantes que existem no MySQL, o ZEROFILL (preenchimento com zeros à esquerda) e o AUTO_INCREMENT (incremento automático).
Como fazer o AUTO_INCREMENT no PostgreSQL
O recurso de auto incremento no Postgres é feito através de SEQUENCES (sequências), que é um tipo de objeto que armazena sequências.
Em um exemplo mais simples criamos a tabela sem criar a SEQUENCE explicitamente. A palavra chave SERIAL, na verdade é o tipo INTEGER e faz com que uma sequência seja criada implicitamente para o campo:
CREATE TABLE tb_teste(
id SERIAL PRIMARY KEY
);
Dentre as mensagens exibidas após o comando acima, destaca-se:
NOTICE: CREATE TABLE will create implicit sequence "tb_teste_id_seq" for serial column "tb_teste.id"
Vejamos a descrição da tabela:
\d tb_teste
Table "public.tb_teste"
column | Type | Modifiers
--------+--------+-------------------------------------
id | integer | not null default nextval('tb_teste_id_seq'::regclass)
Indexes:
"tb_teste_pkey" PRIMARY KEY, btree (id)
Como podemos ver, não existe "mágica" e sim LÓGICA! :) -> Se quiser um auto incremento, tem que ter uma sequência, a qual é o valor padrão do campo ao qual está associada, nem que seja criada implicitamente.
Criação de uma sequência:
Incrementa com razão = 1 (lembre-se das aulas de progressão aritmética ;) ), valor mínimo = 0, valor máximo = 99999:
CREATE SEQUENCE sq_exemplo INCREMENT 1 MINVALUE 0 MAXVALUE 99999;
Enfim, o ZEROFILL
Criação da tabela:
CREATE TABLE tb_exemplo(
id CHAR(5) DEFAULT lpad(nextval('sq_exemplo')::CHAR(5),5,'0';) PRIMARY KEY
);
Repare que desta vez houve a mensagem de criação de sequência implícita. Isso porque a mesma foi criada explicitamente.
E onde está o EFEITO ESPECIAL?
- A restrição DEFAULT, que atribui um valor padrão ao campo;
- A função nextval que retorna o próximo valor da sequência, sua sintaxe é: nextval('nome_da_sequence');
- A função lpad que recebe aqui três parâmetros: text, integer e text.
No primeiro parâmetro, nextval('sq_exemplo')::CHAR(5), como a função nextval retorna um integer, foi preciso converter para um formato texto, que no caso foi CHAR(5).
No segundo parâmetro, 5 é o tamanho máximo da string que será preenchida com zeros à esquerda.
E no terceiro parâmetro, '0', é o caractere que será usado para preencher à esquerda caso de a string (primeiro parâmetro) seja menor que o tamanho máximo (segundo parâmetro).
Teste:
INSERT INTO tb_exemplo VALUES (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT);
O comando acima é um INSERT múltiplo na tabela que só tem um campo e que o mesmo possui um valor padrão (DEFAULT) e esse valor é o próximo número da sequência, com preenchimento de zeros à esquerda.
Agora vejamos o resultado:
SELECT * from tb_exemplo;
id
-----
00000
00001
00002
00003
00004
00005
(6 rows)
Vale a pena repetir os testes para ver os valores inseridos.
Enfim, confie no poder do grande elefante e tome suas rédeas para dominá-lo. XD
Nenhum coment�rio foi encontrado.