Como guardo números de telefone no PostgreSQL?

Respostas:

21

libphonenumber

Sempre que possível, use sempre a forma canônica. Quanto mais normalizado o formulário, melhor. Se houver um padrão, use-o. Para esse problema, vamos usar o libphonenumber do Google , por proxy do pg-libphonenumber .

CREATE EXTENSION pg_libphonenumber;

Atualmente, instala o phone_numbertipo que possui operadores e funções de comparação. Ele armazena o número de forma canônica internacional. Este é o melhor compromisso na minha opinião.

parse_phone_number('textnumber', 'CountryCode');

Como sabemos quando os números de telefone são iguais e fornecemos uma forma normal interna, podemos fazer isso.

SELECT parse_phone_number('03 7010 1234', 'AU') = parse_phone_number('(03) 7010 1234', 'AU');

(retorna verdadeiro). Isso também significa que DISTINCTfunciona para que possamos fazer isso para obter o efeito que você deseja acima.

CREATE TABLE foo
AS
  SELECT DISTINCT parse_phone_number(ph, 'AU')
  FROM ( VALUES
    ('0370101234'),
    ('03 7010 1234'),
    ('(03) 7010 1234')
  ) AS t(ph);
SELECT 1

Isso coloca ..

 parse_phone_number 
--------------------
 +61 3 7010 1234
(1 row)
Evan Carroll
fonte
8
Infelizmente, o pacote parece estar em estado alfa por mais de 1 ano ... Recomenda-se o máximo de cuidado se você tentar usá-lo na produção.
joanolo
2
@joanolo Você está certo, mas parece que um novo colaborador, Evan Carroll, assumiu um novo compromisso ainda hoje ... Alguém consideraria toda essa autopromoção da parte de Evan, mas eu atualizei essa resposta também porque ele está ativamente contribuindo para a extensão ...
Dario
3
Eu apenas "contribuí" para a documentação. E fiz isso antes de postar isso da mesma maneira que sempre faço para melhorar a documentação. Eu não sou um "colaborador", em qualquer sentido útil. Eu não tenho um pouco de confirmação. Eu não escrevo código C ++. Eu sou apenas apaixonado por ter a ligação de número de código de acesso no PgSQL e outros que sabem sobre eles e como usá-los.
Evan Carroll
5
Contribuir para a documentação está contribuindo. ;) E usarei libphonenumber em um projeto meu (seguro, não crítico) por causa deste post. Obrigado.
Dario
4
Quanto vale a pena, usamos libphonenumber para normalizar o número antes que ele entre no banco de dados - dessa forma, não precisamos depender (no momento da escrita) de plugins de postgres de qualidade alfa que não podem ser usados ​​no RDS e outras implantações de postgres baseadas na nuvem.
31517 John Hamelink