PostgreSQL com ZEROFILL e AUTO_INCREMENT

Publicado por Juliano Atanazio em 23/03/2010

[ Hits: 19.158 ]

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

Consulta aleatória com PostgreSQL

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

PostgreSQL: Concedendo ou revogando privilégios em colunas

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

Leitura recomendada

Blog sobre o Linux

Controle de internet por usuário

IWD - Sistema HelpDesk voltado a empresas de suporte

Driver NVIDIA no LMDE 2014

O Windows não entra nem em modo seguro?

  

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