Git Product home page Git Product logo

pgbrtypes's Introduction

pgBRTypes

This is a simple implementation of some brazilians data types as CNPJ and CPF in PostgreSQL. The documentation is avaliable only in portuguese.

Tipos de dados comumente utilizados no Brasil. Por enquanto os tipos disponíveis são CPF e CNPJ, mas em breve serão implementados outras tipagens como título de eleitor, RG (alguns estados), certidões, etc.

I. Pré-requisitos

  • PostgreSQL >= 9.1 (Testado somente na versão 9.6, porém acreditamos que rode tranquilamente em versões anteriores);
  • pg_config acessível diretamente via shell (caminho dos binários do postgres configurados no PATH);
  • Pacote make e suas dependências;

II. Instalação

Windows

Não há suporte/documentação para utilização neste sistema operacional, mas é possível instalação seguindo-se os procedimentos padrões de instalação de extensions para postgres no windows, mas estes procedimentos não foram verificados e, portanto, não serão descritos aqui.

Linux

Após download do pacote e dentro da pasta do mesmo execute:

make && make install

Logado no PostgreSQL no banco de dados desejado execute:

CREATE EXTENSION pgbrtypes;

Pronto! PgBRTypes já estará pronta para uso.

III. Utilização

Criando CPF's / CNPJ's:

SELECT 
	20787875660::cpf,
	'021.516.186-68'::cpf,
	508581060::cpf,
	56808167000138::cnpj,
	'14.320.135/0001-49'::cnpj,
	4283548000147::cnpj;

-- * CPFs e CNPJs gerados aleatoriamente.

-- Convertendo colunas de tabelas:
CREATE TABLE teste_pgbrtypes(
	cpf_numerico BIGINT NOT NULL,
	cpf_texto VARCHAR NOT NULL,
	cpf_texto_formatado VARCHAR NOT NULL
); 

INSERT INTO teste_pgbrtypes
VALUES (20787875660, '02151618668', '005.085.810-60');

SELECT *
FROM teste_pgbrtypes;

 cpf_numerico |  cpf_texto  | cpf_texto_formatado
--------------+-------------+---------------------
  20787875660 | 02151618668 | 005.085.810-60
(1 row)

ALTER TABLE teste_pgbrtypes
ALTER COLUMN cpf_numerico TYPE cpf,
ALTER COLUMN cpf_texto TYPE cpf USING (cpf_texto::cpf),
ALTER COLUMN cpf_texto_formatado TYPE cpf using (cpf_texto_formatado::cpf);

SELECT *
FROM teste_pgbrtypes;

  cpf_numerico  |   cpf_texto    | cpf_texto_formatado
----------------+----------------+---------------------
 207.878.756-60 | 021.516.186-68 | 005.085.810-60
(1 row)

Observe que podem ser feitas conversões de dados para CPF oriundos de tipos numéricos ou de caracteres, com ou sem zeros à esquerda. O mesmo se aplica a CNPJ.

IV. Indexação

pgBRTypes provê alguns operadores e funções para a criação de índices do tipo B-Tree. Segue um exemplo:

CREATE INDEX idx_teste_pgbrtypes_cpf on teste_pgbrtypes (cpf_numerico);

SET enable_seqscan TO OFF;

EXPLAIN ANALYSE
SELECT cpf_numerico
FROM teste_pgbrtypes
WHERE cpf_numerico = 20787875660;

                                                                  QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------
 Index Only Scan using idx_teste_pgbrtypes_cpf on teste_pgbrtypes  (cost=0.12..8.14 rows=1 width=8) (actual time=0.265..0.269 rows=1 loops=1)
   Index Cond: (cpf_numerico = '20787875660'::bigint)
   Heap Fetches: 1
 Planning time: 0.725 ms
 Execution time: 0.628 ms
(5 rows)

Observe que não é necessário fazer um cast para que o filtro (número 20787875660) seja verificado como CPF internamente na busca, o postgres fará o cast automaticamente. Poderíamos ter utilizado como filtro o mesmo número como caractere com ou sem formatação ('20787875660' ou '207.878.756-60') o resultado seria o mesmo.

A mesma funcionalidade aplica-se a CNPJ!

V. Funções de verificação

Utilize a função is_cpf({BIGINT | TEXT | CSTRING}) para verificar se um CPF é válido e is_cnpj({BIGINT | TEXT | CSTRING}) para CNPJ.

VI. Controlando formatação

São disponibilizadas duas configurações para controlar se a saída deve ser ou não formatada, uma para CPF e outra para CNPJ:

SHOW cpf.enable_format;
SHOW cnpj.enable_format;

Isso ajuda a minimizar impactos de utilização de pgBRTypes uma vez que pode ser controlada a saída conforme determinada aplicação ou usuário espera.

Para alterar a exibição faça:

SET cpf.enable_format TO OFF;	 CPF's serão exibidos sem formatação
SET cpf.enable_format TO ON;	 CPF's serão exibidos com formatação

SET cnpj.enable_format TO OFF;	 CNPJ's serão exibidos sem formatação
SET cnpj.enable_format TO ON;	 CNPJ's serão exibidos com formatação

É possível alterar estas configurações especificamente para um usuário, utilize:

ALTER USER <nome usuário> SET {cpf.enable_format | cnpj.enable_format} to {ON | OFF};

Ex.:

ALTER USER usr_oreia SET cpf.enable_format to OFF;

No exemplo acima o usuário usr_oreia não receberá os CPF's com formatação nos retornos.

VII. Encontrou um BUG??!!

Favor reportar para: [email protected] @marconeperes

VIII. Posso utilizar em Produção?

Claro!!!

IX. E se der problema?

pgBRTypes é fornecida como está e sua utilização é por conta e risco de quem decide utilizá-la. Faça teste em seu ambiente, pois não terá quem responsabilizar caso ocorra alguma falha, perda ou corrupção de dados.

Agora se der tudo certo, favor dar os créditos! kkkk

pgbrtypes's People

Contributors

marconeperes avatar

Watchers

James Cloos avatar Marcos Nogas avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.