PostgreSQL com ZEROFILL e AUTO_INCREMENT

Publicado por Juliano Atanazio em 23/03/2010

[ Hits: 18.814 ]

Blog: http://juliano777.wordpress.com

 


PostgreSQL com ZEROFILL e AUTO_INCREMENT



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?
  1. A restrição DEFAULT, que atribui um valor padrão ao campo;
  2. A função nextval que retorna o próximo valor da sequência, sua sintaxe é: nextval('nome_da_sequence');
  3. 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

Outras dicas deste autor

Função SQL replace: corrigindo inserções equivocadas

Eliminando linhas de comentário ou linhas em branco no Linux

Consulta aleatória com PostgreSQL

PostgreSQL: Concedendo ou revogando privilégios em colunas

Clonando máquinas na rede pelo UDP Cast (sem Live CD do mesmo)

Leitura recomendada

Endian 2.4 - Adicionando usuário para visualizar relatórios do Sarg

Gravar arquivos no Windows a partir do Ubuntu (NTFS)

Endian no VirtualBox - Configurações de redes

Tradução do OCS inventory NG para português

Squid - Liberando apenas o Outlook

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts