quinta-feira, 12 de junho de 2014

Alterar os locais do INDEX postgresql


select 'ALTER INDEX '||schemaname||'.'||indexname||' SET TABLESPACE fastspace ;'
from pg_catalog.pg_indexes
where schemaname <> 'pg_catalog'
order by tablename;

sexta-feira, 9 de maio de 2014

Posicionamento de Objetos CSS

O meu problema era posicionar o rodapé perto da borda inferior e o cabeçalho perto da borda superior. 

Com o código abaixo foi possível fazer isso.


#rodape-tema {
position: absolute;
bottom: 0;
height: 80px;
line-height: 80px;
text-align: center;
width: 100%;
}
#banner_institucional {
position: absolute;
top: 0;
width: 100%;

}

quinta-feira, 10 de abril de 2014

Instalação POSTGRES/POSTGIS em FEDORA/RED HAT

Para verificar a versão do REDHAT

 cat /etc/redhat-release


Ajustando o YUM para acessar os repositórios através do PROXY


Para permitir todas operações do yum usando um servidor proxy, especifique os detalhes do servidor proxy em /etc/yum.conf. A configuração proxy deve especificar o servidor proxy como uma URL completa, incluindo o número da porta TCP. Se o seu servidor proxy necessita de usuário e senha, especifique adicionando as configurações proxy_username e proxy_password.

# The proxy server - proxy server:port number 
proxy=http://mycache.mydomain.com:3128 
# The account details for yum connections 
proxy_username=yum-user 
proxy_password=qwerty
 
Fonte:http://docs.fedoraproject.org/pt-BR/Fedora_Core/5/html/Software_Management_Guide/sn-yum-proxy-server.html 




Configurando o repositório YUM
Localize em sua distribuição Linux o arquivo com a extensão .repo, localizado em:
  • Fedora: /etc/yum.repos.d/fedora.repo and /etc/yum.repos.d/fedora-updates.repo, seção [fedora] 
  • CentOS: /etc/yum.repos.d/CentOS-Base.repo, seção [base] and [updates] sections
  • Red Hat: /etc/yum/pluginconf.d/rhnplugin.conf seção[main] 
Inserir a linha:
 
exclude=postgresql*


Para listar os pacotes (packages) disponíveis

yum list postgres*


yum remove libaep.so

sudo yum install http://mirror.centos.org/centos/6/os/x86_64/Packages/openssl-1.0.1e-
15.el6.x86_64.rpm


Para instalar o servidor POSTGRESQL


yum install postgresql93-server.x86_64
 
ou
 
yum install postgresql93-server 

Para criar e inicializar um database


service postgresql-9.3 initdb

chkconfig postgresql-9.3 on

Para ajustes nas permissões de acesso
vim /var/lib/pgsql/9.3/data/pg_hba.conf

vim /var/lib/pgsql/9.3/data/postgres.conf

Fonte: https://wiki.postgresql.org/wiki/YUM_Installation

Para instalar os compiladores necessários

yum install gcc gcc-c++

Para instalar o LIBXML2

tar vxzf libxml2-2.9.0.tar.gz
cd libxml2-2.9.0
./configure --prefix=/usr --disable-static --with-history && make
make check
make install

Para instalar o GEOS

tar -xvjf geos-3.4.2.tar.bz2
cd geos-3.4.2
./configure
make
make check
make install

Para instalar o PROJ.4

tar -xzvf proj-4.8.0.tar.gz
cd proj-4.8.0
./configure
make
make check
make install

Para instalar o GDAL (a última versão não funcionou - gdal-1.10.1)  

tar -xvzf gdal-1.10.0a.tar.gz
cd gdal-1.10.0
./configure
make

make install

Na pasta postgis-2.1.2


export PATH=$PATH:/usr/pgsql-9.3/bin/


./configure --with-geosconfig=/home/local/MDS/caio.nakashima/postgres/geos-3.4.2/tools/geos-config --with-gdalconfig=/usr/local/bin/gdal-config
make
make install

Testando o Postgis

com usuário postgres, criar um database

createdb mapas
createlang plpgsql mapas

procurar pelo arquivo postgis.sql


find / -name postgis.sql
/usr/pgsql-9.3/share/contrib/postgis-2.1/postgis.sql

Para carregar as definições dos objetos e funções do POSTGIS no banco de dados, executa-se o comando abaixo

 psql -d mapas -f postgis.sql

Para completar ajustar os identificadores do sistema de coordenadas EPSG. Carrega-se o arquivo spatial_ref_sys.sql para popular a tabela spatial_ref_sys.

psql -d mapas -f spatial_ref_sys.sql

Para restaurar cópias antigas de versões anteriores

psql -d mapas -f legacy.sql

Para carga de shape files

/usr/pgsql-9.3/bin/shp2pgsql -c -W LATIN1 53UFE250GC_SIR.shp mapas.shp_uf | psql -d mapas

/usr/pgsql-9.3/bin/shp2pgsql -a -W LATIN1 53MUE250GC_SIR.  mapas.shp_mu | psql -d mapas


terça-feira, 10 de setembro de 2013

Verificar se um ponto esta contido em um poligono

Esta cada vez mais recorrente a pergunta:

"Esta coordenada (latitude, longitude) de um equipamento esta dentro do município?"

A consulta baixo permite responder esta pergunta.

select ST_Contains(the_geom, ST_Point(longitude::float,latitude::float) ), uf, nome
from mapas.shp_munic
order by uf, nome

Com a base do IBGE de municípios, pode-se pegar as informações de (latitude, longitude) e executar a pesquisa.

terça-feira, 23 de julho de 2013

Copia de tabelas em servidores diferentes com PLPGSQL

Um desafio que apareceu foi fazer cópia de 54 tabelas de um servidor Postgres de um servidor para outro. Estas tabelas são formadas por 2 grupos de 27 tabelas referentes à 27 unidades da federação. O primeiro caminho que segui para solução do problema, foi fazer uma cópia de segurança, vulgo BACKUP, e restaurar em outro servidor. O problema apareceu quando percebi que o arquivo resultante da cópia era muito grande e o processo de restauração levaria mais tempo que a cópia. Assim passei para outra solução, criar um script para fazer a cópia da tabela. Para isso utilizei o dblink e a linguagem plpgsql.

O código para criar a função foi:


create or replace function copia_pessoa(esquema varchar, uf varchar) returns text as $$
declare
     tabela1 varchar;

begin
        tabela1 := 'tab_cad_'|| esquema || '.tb_pessoa_uf_' || uf;
RAISE NOTICE 'Tabela destino %' ,tabela1;
execute 'create table '|| tabela1 ||' as
select * from dblink 
(''port=porta dbname=database host=iphost user=user password=senha'',
''select * from  ' || tabela1 || ' '') as t1
(
  cd_ibge character varying(13),
  cod_familiar_fam character varying(11),
  num_membro_fmla character varying(11),
  marc_pbf numeric(8,0),
  marc_bsp numeric(8,0)
)' ;

execute ' CREATE INDEX idx_cd_ibge_uf'||uf||'_pess_'||esquema||'   ON ' || tabela1 || '  USING btree   (cd_ibge)';

execute ' CREATE INDEX idx_cod_familiar_fam_uf' ||uf|| '_pess_' ||esquema||' ON '|| tabela1 ||' USING btree   (cod_familiar_fam)';



return 'Sucesso ' || tabela1;
end;

$$ language plpgsql;


Destaco que neste código pude fazer com que o nome da tabela é uma variável conforme o parâmetro passado.

tabela1 := 'tab_cad_'|| esquema || '.tb_pessoa_uf_' || uf;


O nome da tabela é composto pelo nome do esquema e código do ibge da UF.

O comando EXECUTE permite que o comando SQL seja executado com parâmetros, neste caso o nome da tabela.

execute 'create table '|| tabela1 ||' as
select * from dblink ...';

Para utilizar a função pode-se utilizar o comando abaixo, onde o primeiro parâmetro é o nome do esquema e o segundo parâmetro é o código ibge da UF.

select copia_pessoa('nome_do_esquema','12')

Uma outra forma de utilização foi:

select copia_pessoa('18052013',ibge::varchar) from estados

onde na tabela estados se obtém os códigos do IBGE dos estado no campo ibge.

create table estados (ibge integer, uf char(2));

 insert into estados (ibge, uf) values (11,'RO');
 insert into estados (ibge, uf) values (12,'AC');
 insert into estados (ibge, uf) values (13,'AM');
 insert into estados (ibge, uf) values (14,'RR');
 insert into estados (ibge, uf) values (16,'AP');
 insert into estados (ibge, uf) values (17,'TO');
 insert into estados (ibge, uf) values (22,'PI');
 insert into estados (ibge, uf) values (23,'CE');
 insert into estados (ibge, uf) values (24,'RN');
 insert into estados (ibge, uf) values (25,'PB');
 insert into estados (ibge, uf) values (27,'AL');
 insert into estados (ibge, uf) values (28,'SE');
 insert into estados (ibge, uf) values (29,'BA');
 insert into estados (ibge, uf) values (31,'MG');
 insert into estados (ibge, uf) values (41,'PR');
 insert into estados (ibge, uf) values (43,'RS');
 insert into estados (ibge, uf) values (50,'MS');
 insert into estados (ibge, uf) values (51,'MT');
 insert into estados (ibge, uf) values (52,'GO');
 insert into estados (ibge, uf) values (53,'DF');
 insert into estados (ibge, uf) values (15,'PA');
 insert into estados (ibge, uf) values (21,'MA');
 insert into estados (ibge, uf) values (33,'RJ');
 insert into estados (ibge, uf) values (35,'SP');
 insert into estados (ibge, uf) values (42,'SC');
 insert into estados (ibge, uf) values (26,'PE');

 insert into estados (ibge, uf) values (32,'ES');

quinta-feira, 2 de maio de 2013

UPDATE com um comando SQL



Precisei atualizar a tabela pradin.s00031label os campos UF, MUNICIPIO, LAT, LON a partir da tabela mapas.shp_munic. Estava com preguiça em escrever 4 consultas SQL uma para cada campo. Com a expressão abaixo consegui fazer um comando SQL para atualizar 4 campos em um SGBD Postgresql 9.2.

update pradin.s00031label
set
  uf = b.uf,
  municipio = b.nome ,
  lat = b.latitude,
  lon = b.longitude
from
    mapas.shp_munic b
where  
    s00031label.ibge=b.ibge

quinta-feira, 4 de abril de 2013

comando UPDATE e DBLINK


O problema que tive é atualizar o campo "ibge7" da tabela "dados" com informações contidas em um outro banco de dados.

Utilizei o comando UPDATE e DBLINK

update sisfam.dados as l set ibge7 = (
select geocodigo from
(
select geocodigo, nome, ibge, sigla
from dblink
(
'dbname=database
hostaddr=enderecoip
user=usuario
password=senha
port=porta',

'
select m.geocodigo, m.nome, m.ibge, u.sigla
from mapas.shp_munic m , mapas.shp_uf u
where trunc(m.ibge/10000)=u.ibge'
)
as t1(geocodigo bigint, nome varchar, ibge bigint, sigla char(2))
)
 as f
 where  lower(trim(f.sigla))=lower(trim(l.uf))
and lower(trim(f.nome)) = lower(trim(l.municipio))
)