segunda-feira, 29 de abril de 2013

Comandos úteis para PostgreSQL - Parte 2

Olá galera,

No post Comandos úteis para PostgreSQL - Parte 1 citei alguns comandos que uso no dia a dia. No post de hoje adicionarei mais alguns.

Importar um arquivo CSV:

COPY sua_tabela (campos) FROM 'path_para_o_arquivo' WITH DELIMITER ';'

Ex: COPY contatos (nome, telefone, email) FROM '/home/benicio/Documentos/contatos.csv' WITH DELIMITER ';'

Atualizar um campo do tipo POINT a partir de coordenadas:

UPDATE sua_tabela SET campo_geometrico = GeomFromText('POINT(' || campo_longitude || ' ' || campo_longitude || ')', projecao);

Ex: UPDATE localidade SET the_geom = GeomFromText('POINT(' || longitude || ' ' || latitude || ')', 4326);

Remover espaços em branco:

UPDATE sua_tabela SET seu_campo = TRIM(BOTH ' ' FROM seu_campo);

Ex: UPDATE eventos SET dias = TRIM(BOTH ' ' FROM dias);

Substituir strings ou parte delas:

UPDATE sua_tabela SET seu_campo = REPLACE(seu_campo, 'string_de', 'string_para');

Ex: UPDATE outorgas SET estado = replace(estado, 'TO', 'Tocantins');

Atualizar campos de tabelas em schemas diferentes:

UPDATE schema.tabela_destino SET campo_tabela_destino = campo_tabela_origem FROM schema.tabela_origem;

Ex: UPDATE public.domicilios d SET codigo_ibge = m.chave_municipio::integer FROM geo.municipio m WHERE d.cod_munic = m.cod_munic;

Gostaria de compartilhar seus comandos aqui no blog?! Basta enviar seu comando e seu contato que terei a maior satisfação em citá-lo aqui no blog.

Grande abraço a todos e até a próxima.

domingo, 21 de abril de 2013

Ignorando acentos em consultas com PHP e PostgreSQL

.

Olá galera,

Nesse post mostrarei um forma prática de se fazer consultas onde acentos são ignorados na busca. Como ultimamente estou trabalhando com Laravel, utilizarei um trecho de código dele para ilustrar. Todavia você pode fazer os ajustes para o framework de sua preferência.

Primeiro utilizaremos o recurso unaccent presente no PostgreSQL 9.1 para tratar os acentos das strings cadastradas no banco. O unaccent é um dicionário de pesquisas textuais que remove os acentos.

O segundo recurso é o transliterator_transliterate presente no PHP 5.4 e transforma uma string ou parte dela através de um ICU transliterator.

    <?php
      $locais = Local::where(DB::raw('unaccent(nome)'), 'ILIKE', "%". transliterator_transliterate('Any-Latin; Latin-ASCII', Input::get('nome')) ."%"); 
    ?>
  

No código acima, estou pesquisando em uma tabela de locais cujo nome foi passado em um formulário de busca fictício. Supondo que o usuário entrou com a string no formulário e na nossa tabela de locais tenhamos cadastrados os nomes: Cuiabá, Barra, Iguatemi, Park Shopping.

O código resultante seria como o abaixo.

    SELECT * FROM locais WHERE unaccent(nome) ILIKE '%ba%'
  

E como resultado da nossa busca teríamos os nomes: Cuiabá, Barra.

OBS: Para que os códigos acima funcionem é necessário instalar o recurso no PostgreSQL e o pacote de internacionalização do PHP. Para o PHP 5.5.3 é necessário instalar o pacote php5-intl e para o PostgreSQL deve se executar CREATE EXTENSION IF NOT EXISTS unaccent

Não é realmente simples?! Um grande abraço e até a próxima.

terça-feira, 16 de abril de 2013

Shapefiles do Brasil para download

Olá galera,

Hoje precisei de alguns shapefiles atualizados do Brasil. Para ser mais preciso shapes de Regiões, Estados e Municípios do Brasil.

Depois de muita busca, consegui achar os de Estado e Municípios com uma boa qualidade. Já o de Regiões, eu mesmo tive de montar aqui unindo as feições dos Estados que compõe cada região.

Como minha finalidade é guardá-los no PostGIS, fiz alguns ajustes. Acrescentei algumas colunas e removi as que julguei desnecessárias. Abaixo seguem os links para download.

Regiões

Estados

Municípios

OBS: Todos os shapes estão na projeção EPSG:4326. Os dados referentes a população e PIB dos munícipios são dados retirados do IBGE do ano de 2010.

Um grande abraço e até a próxima.

segunda-feira, 8 de abril de 2013

Wireless travando no Ubuntu 12.10

Olá galera,

Sempre que realizo muitos downloads simultâneos, nessa versão do Ubuntu, minha wireless trava. Você poderia sugerir para eu desconectar da wireless e conectar novamente não é verdade?! Também não funciona. Eu consigo conectar mas não navegar. A única solução que funcionava era reiniciar o notebook. Uma alternativa incômoda ainda mais quando se está muito atarefado.

Conversando com um amigo, ele comentou que já teve o mesmo problema usando uma versão do Ubuntu com o KDE e em um notebook com hardware diferente do meu.

Segue abaixo a solução que ele utiliza quando ocorre o problema.

sudo rmmod seu_adaptador_de_rede

O comando rmmod remove os módulos do kernel em execução.

O meu adaptador de rede aqui é o rtl8192se. Verifique qual o seu e substitua o trecho seu_adaptador_de_rede por ele.

Agora temos de subir o módulo novamente.

sudo modprobe seu_adaptador_de_rede

O comando modprobe carrega o módulo do kernel.

Bem galera espero que a dica do meu amigo Luiz tenha sido útil.

Um abraço a todos e até a próxima.