quarta-feira, 14 de outubro de 2020

Teclas Atalho Libre Office

 

AtalhoEfeito
HOMEPosiciona o cursor no começo da linha corrente
SHIFT+HOMEPosiciona o cursor no começo da linha corrente, selecionando o texto da posição inicial até o começo da linha
ENDPosiciona o cursor no fim da linha corrente
SHIFT+ENDPosiciona o cursor no fim da linha corrente, selecionando o texto da posição inicial até o fim da linha
CTRL+HOMEPosiciona o cursor no começo do documento
SHIFT+CTRL+HOMEPosiciona o cursor no começo do documento, selecionando todo o texto, da posição inicial até o começo do documento
CTRL+ENDPosiciona o cursor no final do documento
SHIFT+CTRL+ENDPosiciona o cursor no final do documento, selecionando todo o texto, da posição inicial até o final do documento
CTRL+Seta à esquerdaMove o cursor para a esquerda, uma palavra por vez, posicionando o cursor no início da palavra
SHIFT+CTRL+Seta à esquerdaMove o cursor para a esquerda, uma palavra por vez, selecionando o texto
CTRL+Seta à direitaMove o cursor para a direita, uma palavra por vez, posicionando o cursor no início da palavra
SHIFT+CTRL+Seta à direitaMove o cursor para a direita, uma palavra por vez, selecionando o texto

quinta-feira, 12 de março de 2020

Ontologia

Podemos, resumidamente, dizer que uma ontologia é uma representação computacional de um
determinado domínio de conhecimento.
Ontologias são agora fundamentais para muitas aplicacões como portais de conhecimento científico, gerenciamento de informações e integração de sistemas, comércio eletrônico, e principalmente serviçoos relacionados com web semântica [1]
Uma ontologia é uma taxonomia de conceitos com atributos e relações, que proporciona um vocabulário consensuado para definir redes semânticas de unidades de informações interrelacionadas.[2]
Ontologia, a disciplina que estuda e determina as relações entre conceitos estabelecendo regras lógicas de racioncínio sobre estes conceitos gerando linguagens que são compreendidas pelos computadores.[3]
Agentes são programas gerados para coletar conteúdos na web a partir de fontes diversas, processar a informação e permutar os resultados com outros programas permitindo através de linguagem que expressa inferências lógicas resultantes do uso de regras e informação como aquelas especificadas pelas ontologias[3].


RDF Resource Description Framework - http://www.w3.org/RDF/


Fonte:
[1] Populando ontologias através de informações em HTML - o caso do currículo lattes - André Casado Castaño
[2] Aplicación de técnicas de la web semántica - Pablo Castells - Ecuela Politécnica Superior - Universidad Autónoma de Madrid - pablo.castells@uam.es
[3] Web Semântica: Novo desafio para profissionais da informação - Rosa Maria Vivona Bertolini Oliveira - PUC Campinas - vivona@puc-campinas.br

Modelo de Maturidade para interoperabilidade


Modelo de Maturidade para interoperabilidade

Padronização
Implementação
Marco
Contexto
Ações
Governança
Sócio Cultural Não Existe Nenhum Nenhum Nenhum
Político-Legal Existe Geral Muitas Fraca
Organizacional Existe Geral Muitas Média
Informacional Existe Em alguns setores Muitas Fraca
Tecnológica Existe Muitos setores Muitas Fraca

No órgão onde eu trabalho, existe um ecossistema muito diversificado onde a maturidade dos processos varia entre muito maduro até inexistente. Em um debate interno classificou-se o órgão em dois setores que estão com processos bem definidos e maduros que estão com “fartura” de de profissionais pensantes e que possibilitam soluções e outros três setores que são as “fontes” de problemas não resolvidos.

Verifica-se esta situação por ser uma área em que a sociedade civil esta ainda bem organizada e seus processos são inexistentes ou pouco maduros, onde sua reprodutibilidade é baixa. Nos 6 anos de existência do órgão, não faltaram esforços para mapear os processos a fim de buscar uma padronização mínima. Porém o insucesso dos esforços é por falta de maturidade nestes processos. Observa-se que desde o início da gestão deste órgão, o avanço foi muito grande, pois muitos repasses financeiros que eram feitos para os municípios e estados não se tinha controle, hoje existe um acompanhamento, precário.

Os dois setores que foram considerados “organizados”, seus objetos de trabalho são bem definidos e delimitados, os demais setores estão ou estavam buscando a melhor forma de gestão. Existe um atropelo de tempo, processos, oportunidades, etc. Por exemplo, desde a criação do órgão, havia necessidade de manter os “gastos”, “repasses” herdados dos órgãos de origem. Junto com esta tarefa, foi gasto um esforço muito grande para buscar Marcos Legais para as principais políticas. Em paralelo houve um trabalho de organização de Câmaras Técnicas, Conselhos, Conferências para mobilizar as bases municipais e estaduais para o convencimento e prática da política, uma vez que não existe representantes legais nestes lugares. Estas sementes foram plantadas durante as duas gestões do governo Lula e os muitos frutos foram sendo colhidos. Durante a colheita de muito destes frutos descobriu-se falhas no processo. Por exemplo, em 2005 foi implantada um Norma Operacional Básica da Política, hoje em 2010 está-se estudando sua atualização. Muitos municípios ainda não conseguiram implementar a primeira NOB e sua atualização já esta quase para ser aprovada.

Em um contexto muito dinâmico como este, é muito caro mapear e implantar processos que levam mais de dois anos para sua entrega e utilização. Tem que se buscar em ambiente instáveis e “nebulosos” ferramentas que permitam os gestores de todos os níveis contribuir com suas experiências e buscar modelos e referências com casos reais de sucesso.

Um dos objetivos da participação neste curso é desenvolver habilidades que incentivem a interoperabilidade de práticas de gestão para que em um próximo passo seja possível a interoperabilidade de dados e conhecimento.

Tamanho tabela e database POSTGRES




Para determinar o tamanho de uma tabela no banco de dados atual,  o seguinte comando. Substituir tablename pelo nome da tabela que se deseja verificar:

SELECT pg_size_pretty( pg_total_relation_size('tablename') );

Para determinar o tamanho de um banco de dados, o seguinte comando. Substituir dbname pelo nome do banco de dados que se deseja verificar:

SELECT pg_size_pretty( pg_database_size('dbname') );


Hibernate Annotations

Requer:
a) Hibernate Core 3.3 ou superior
b) JDK 5.0 ou superior

Configuração:
a) arquivos MINLIB3.3


import org.hibernate.*;
import org.hibernate.cfg.*;
import test.*;
import test.animals.Dog;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {
try {

sessionFactory = new AnnotationConfiguration()
configure().buildSessionFactory();
} catch (Throwable ex) {
// Log exception!
throw new ExceptionInInitializerError(ex);
}
}

public static Session getSession()
throws HibernateException {
return sessionFactory.openSession();
}
}

Hibernate Query

Formas de consultas em Hibernate.
Primeiro HQL:
session.createQuery("from Category c where c.name like 'Laptop%'");

Segundo é Criteria API para consulta por criteria (QBC) e consulta por exemplos (query by example - QBE):
session.createCriteria(Category.class)
.add( Restrictions.like("name", "Laptop%") );

Terceiro: Uso direto de SQL com mapeamento automático dos resultados para objetos:
session.createSQLQuery(
"select {c.*} from CATEGORY {c} where NAME like 'Laptop%'",
"c",Category.class);


Para executar uma consulta na aplicação, necessita-se obter uma instância uma destas interfaces utilizando Session. Uma consulta envolve inúmeros passos como:
1) Criar uma consulta, com qualquer restrição ou projeção dos dados que se deseja recuperar;
2) Atribuir os argumentos em tempo de execução para os parâmetros de consulta; as consultas podem ser reutilizadas mudando-se as configurações.
3) Executar a consulta preparada sobre o banco de dados e recuperar as informações. Pode-se controlar como a consulta é executada e como os dados devem ser recuperadas para a memória (por exemplo, tudo de uma vez ou em partes).

XML to Array PHP

Contribuição de Ricardo Feitosa (Transforma um XML para array)


function xml2array($xml)
{
$xmlary = array();
$reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
$reattrs = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';
preg_match_all($reels, $xml, $elements);
if (is_array($elements))
{
foreach ($elements[1] as $ie => $xx)
{
$cdend = strpos($elements[3][$ie], "<");
if ($cdend > 0)
{
$xmlary[$elements[1][$ie]] = substr($elements[3][$ie], 0, $cdend - 1);
}
if (preg_match($reels, $elements[3][$ie]))
$xmlary[$elements[1][$ie]] = xml2array($elements[3][$ie]);
else
if ($elements[3][$ie])
{
$xmlary[$elements[1][$ie]] = $elements[3][$ie];
}
}
return $xmlary;
}
return $xml;
}

function xml2get($id,$xml)
{
$parametros = xml2array($xml);
$resultado = "";
foreach ($parametros[$id] as $key => $value)
$resultado.= "$key=".urlencode($value)."&";
if (substr($resultado,-1) == "&")
return substr($resultado,0,-1);
return false;
}

Trocando tablespace postgresql

O meu problema era trocar de tablespace os arquivos de índice. A expressão SQL abaixo cria uma expressão SQL que fará isso.

select 'ALTER INDEX '||schemaname||'.'||indexname||' SET TABLESPACE fastspace ;'
from pg_catalog.pg_indexes
where schemaname!= 'pg_catalog'
order by schemaname, tablename;


sexta-feira, 17 de agosto de 2018

Trocar um conteúdo de um arquivo em Linux

precisei retirar a palavra "tb_cadunico." do arquivo tb_cadunico_201808161516.sql e o resultado foi colocado no arquivo tcb.sql

python -c "import sys;lines=sys.stdin.read();print lines.replace('tb_cadunico.',' ')" < entrada > saida

Para extrair o caracter NULO ou ^@

python -c "import sys;lines=sys.stdin.read();print lines.replace('\0',' ')" < entrada > saida

Para dividir o arquivo em partes

split -l 50000 saida prefixo

segunda-feira, 29 de maio de 2017

Data e hora PHP

date_default_timezone_set('America/Sao_Paulo');
echo date("Ymdh24mi");

quarta-feira, 25 de janeiro de 2017

Excluir um grupo de arquivos Linux

Problema:

Tive que excluir um conjunto de arquivos no linux

ls -al | grep 2015 | awk '{print $9}'

Este comando listou os arquivos que foram gerados no ano de 2015

ls -al | grep 2015 | awk '{print $9}' | xargs rm

o xargs rm permitiu a exclusão dos arquivo selecionados.

quarta-feira, 7 de dezembro de 2016

Data Nascimento em PHP

Código PHP para calcular a idade a partir da data no formato dd/mm/aaaa baseado na data atual (ano)

function calc_idade( $data_nasc ){

$data_nasc = explode("/", $data_nasc);
//~ $d = getdate();
//~ $data[2] = $d['year'];
//~ $data[1] = $d['month'];
//~ $data[0] = $d['mday'];
date_default_timezone_set('America/Sao_Paulo');
$data = date("d-m-Y");
$data = explode("-", $data);
$anos = $data[2] - $data_nasc[2];
if ( $data_nasc[1] >= $data[1] ){
if ( $data_nasc[0] <= $data[0] ){
return $anos; 
                        break;
}else{
return $anos-1;
        break;
}
}else{
return $anos;
}
} 

sexta-feira, 10 de junho de 2016

Analisar Log Apache Tomcat

Analisando arquivo de log do Apache agrupando por data

-sh-4.1$ cat  localhost_access_log.2016-06-10.txt | cut -d " " -f4 | cut -c2-15 | sort | uniq -c
    371 10/Jun/2016:06
   8073 10/Jun/2016:07
  41605 10/Jun/2016:08
  63105 10/Jun/2016:09
  62293 10/Jun/2016:10
  19978 10/Jun/2016:11

Analisando arquivo de log do Apache agrupando por IP de chamada
-sh-4.1$ cat  localhost_access_log.2016-06-10.txt | grep 10/Jun/2016:11 |cut -d " " -f1 | sort | uniq -c
   3676  X.X.X.65
      4     X.X.X.167
  17912 X.X.X.73

Ajuda de Davi Lopes Carvalho

terça-feira, 19 de abril de 2016

Comando Linux find grep e ls

O problema resolvido abaixo é encontrar os arquivos criados há 12 dias que tenham no nome 'domicilio' e listem todos os atributos '-l' ordenado pelo tamanho '-S'

find . -maxdepth 1 -mtime -12 -exec grep domicilio -l {} \; | xargs ls -lS 

Encontrar os arquivos com extensão '*.html' que tenham no nome 'ie' e listar todos os atributos do arquivo.

find . -type f -name "*.html" -exec grep -l ie {} \; | xargs ls -l 


 Ajuda de Davi Lopes Carvalho

quinta-feira, 31 de março de 2016

Como utilizar o método FISH/QTCR/5SS para ler artigos científicos

Já virou clichê dizer que atualmente o ritmo de produção de novas informações e dados não para de crescer. E isso se reflete nas pilhas (virtuais ou físicas) de artigos científicos que acumulam todos os dias na área de trabalho. Assim, melhorar a leitura de artigos, tanto na velocidade quanto na visão crítica, é uma ferramenta valiosa para acompanhar essa enxurrada de informações. A metodologia FISH/QTCR/5SS ajuda a reconstruir o processo de elaboração do artigo, revelando o rationale por trás da história, facilitando assim a compreensão dos métodos e conclusões. Vamos ao que interessa. 1. Introdução com FISH Field: simples, qual é o campo do artigo? Tente ser específico. Importance: por quê o artigo é relevante para você, como cientista, e para a sociedade? Supporting data: quais as principais informações prévias fundamentais para a compreensão do artigo? Hypothesis: muitas vezes esse tópico é o mais difícil de descrever, já que muitos autores escondem a hipótese, ou quando o estudo é exploratório. 2. Lendo as figuras com QTCR Agora que você tem uma visão geral do artigo, use o QTCR em cada figura do artigo. Question: qual é a pergunta que está tentando ser respondida com esse experimento? Tools: quais foram as técnicas e ferramentas utilizadas para responder à pergunta? Seja sempre crítico: as ferramentas são adequadas para responder a pergunta? Quais outras ferramentas os autores poderiam ter utilizado? Caso haja análise estatística, certifique-se de incluir o tipo e os principais parâmetros. Controls: um dos mais importantes. Novamente, seja crítico quanto aos controles. Há algum controle faltando? Os controles são suficientes para tirar conclusões do experimento? Imagine resultados um pouco diferentes dos que foram obtidos, isso auxilia a verificar se os controles são robustos. Results: quais conclusões você pode tirar desse conjunto de experimentos? Lembre-se que muitas vezes as suas conclusões podem não coincidir com as conclusões dos autores, principalmente se há algum problema com os controles utilizados. Finalmente a discussão: Após ler a discussão retire a principal mensagem do artigo ou o 5-SS (5 second summary). Imagine que você tem que contar ao seu orientador, que é, provavelmente, ocupadíssimo, sobre o artigo que você leu. Não se esqueça de sempre ter em mente as suas próprias conclusões das figuras, muitos autores extrapolam e tiram conclusões que não são suportadas pelos experimentos realizados no artigo. Observe que com o QTCR para cada figura, a leitura do texto com os métodos e explicação do experimento fica muito mais fácil, senão dispensável. O cerne dessa metodologia é, justamente, os painéis com os experimentos. Um conselho prático é fazer as anotações FISH/QTCR no próprio artigo, seja escrevendo no canto da página ou por anotações no arquivo. E, para complementar, faça um desenho ilustrativo do modelo gerado com esse estudo, nada rebuscado, apenas para concretizar as conclusões retiradas. O que achou do método? Já usou e teve bons resultados? Pretende usar? Deixe sua opinião nos comentários! . . . Texto escrito por Dimitrius Santiago, bacharel em Bioquímica pela Univesidade Federal de Viçosa e aluno do mestrado Bioquímica na FMRP-USP. Fonte: http://posgraduando.com/fish-qtcr-5ss-leitura-artigos/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+posgraduando+%28PosGraduando%29

segunda-feira, 28 de setembro de 2015

SQL - Demorada

Consultas demoradas

SELECT pid, now(), datname, usename, now()-query_start as tempo_execucao, waiting, client_addr, query
FROM pg_stat_activity
WHERE query not like  '%%' and query_start < now() - interval '5 seconds'  order by 3 desc;

Cancelar uma consulta

 SELECT pg_cancel_backend(pid of the postgres process);

quinta-feira, 27 de agosto de 2015

Lendo dados CSV com R


Para leitura de um arquivo CSV em R

dados = read.csv(file="C:/caio/SNAS/CREAS/CREAS/Bases de Dados/CensoSUAS2014_CREAS_DadosGerais_Divulgação.csv", sep=";", quote='"', header=TRUE)

Relação dos campos lidos
names(dados)

Apresenta os dados da coluna q2
dados$q2

Média dos valores da coluna q8_1
mean(dados$q8_1)

Quantidade de linhas
nrow(dados)

Quantidade de colunas
ncol(dados)

Menor valor
min(dados$q8_1)

Maior valor
 max(dados$q8_1)

Desvio Padrão
sd(dados$q8_1)

Variância 
var(dados$q8_1)

Quartiles
quantile(dados$q8_1)

BOXPlot
summary(dados$q8_1)

Lista todas as variáveis definidas 
ls()

Salva os dados como um objeto do R.
dataDaPesquisa = date()
save(dados, dataDaPesquisa, file="C:/caio/SNAS/CREAS/CREAS/Bases de Dados/CensoSUAS2014_CREAS_DadosGerais_Divulgação.Rda")

Carrega o objeto salvo sem precisar consultar novamente no banco!
dataDaPesquisa = date()
load("C:/caio/SNAS/CREAS/CREAS/Bases de Dados/CensoSUAS2014_CREAS_DadosGerais_Divulgação.Rda")

terça-feira, 25 de agosto de 2015

Algoritmo e Estrutura de Dados Capitulo 1

Algoritmo é qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como saída. É uma ferramenta para resolver um problema computacional bem especificado.

Uma instância de um problema consiste na entrada que satisfaz a quaisquer restrições impostas no enunciado do problema necessária para se calcular uma solução para o problema.

Um algoritmo é dito correto se para cada instância de entrada, ele para com a saída correta.

Diz-se que um algoritmo correto resolve o problema computacional dado.

Os algoritmos incorretos podem ser úteis, se sua taxa de erros pode ser controlada.

O único requisito é que a especificação deve fornecer uma descrição precisa do procedimento computacional a ser seguido.

Estrutura de dados é um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificações. Nenhuma estrutura de dados única funciona bem para todos os propósitos, e assim é importante conhecer os pontos fracos e as limitações de várias delas.

Problemas NP-Completos

  • embora ainda não tenha sido encontrado nenhum algoritmo eficiente para um problema NP completo, ninguém jamais provou que não é possível existir um algoritmo eficiente para este fim. Desconhece-se se existem ou não algoritmos eficiente para problemas NP completos.
  • Se existe um algoritmo eficiente para qualquer um deles, então existem algoritmos eficientes para todos.
  • Vários problemas NP Completos são semelhantes, mas não idênticos, a problemas para os quais conhecemos algoritmos eficientes. Uma pequena mudança no enunciado do problema pode provocar uma grande alteração na eficiência do melhor algoritmo conhecido.
Exemplo de um problema NP Completo é "problema do caixeiro viajante". Não tem nenhum algoritmo eficiente conhecido. "Algoritmos de aproximação".

Exercício:
1.1-1 Forneça um exemplo real no qual apareça um dos problemas computacionais a seguir:
ordenação: Listagem de alunos ou produtos por nome, ou código ou sobrenome, ou fabricante
determinação da melhor ordem para multiplicação de matrizes: Para solução sistema de equações lineares, utilizando método de Gauss
localização da envoltória convexa: topografia, determinar o terreno que envolve os pontos levantados, Curvas de nível

1.1-2 Além da velocidade, que outras medidas de eficiência poderiam ser usadas em configuração real?
Espaço utilizado para solução, custo financeiro dos recursos utilizados, por exemplo: banda de conexão, tempo de processamento.

1.1-3 Selecione uma estrutura de dados que você já tenha visto antes e discuta seus pontos fortes e suas limitações.

Vetor 
Pontos fortes: rapidez no seu acesso. pode-se acessar qualquer posição do vetor diretamente
Pontos fracos: alocação em geral é estática, necessita de uma engenharia para alocar mais espaço, desde que esteja utilizando alocação estática.

1.1-4 Em que aspectos os problemas do caminho mais curto e do caixeiro viajante anteriores são semelhantes? Em que aspectos eles são diferentes?

Aspectos semelhantes: a dificuldade para encontrar a solução mais eficiente esta no tamanho da quantidade de pontos, cidades que se queira analisar, quanto maior o número de cidades, pontos do problema mais difícil fica a solução do problema.

o problema do caminho mais curto pertence a classe P
o problema do caixeiro viajante pertence a classe NP Completo

1.1-5 Mostre um problema real no qual apenas a melhor solução servirá. Em seguida, apresente um problema em que baste uma solução que seja “aproximadamente” a melhor.

Solução Ótima: Quantidade de dinheiro necessária para quitar as dívidas do dia (contas a pagar)
Solução Aproximada: Encontrar o zero de uma função utilizando o método das secantes.

https://meitcher.wordpress.com/2015/01/27/1-1-algoritmos/

O estudo do algoritmo é necessário para demonstrar que o método da solução adotada termina e obtém a resposta correta.

Boa prática da engenharia de software - bem documentada e projetada.

1.2-1 Forneça um exemplo de aplicação que exige conteúdo algorítmico no nível da aplicação e discuta a função dos algoritmos envolvidos

A solução de classificação multivariável, por exemplo aplicação do algoritmo de PROMETHEE, tem que aplicar algoritmo de ordenação, classificação, comparação entre os critérios selecionados.

1.2-2 Vamos supor que estamos comparando implementações de ordenação por inserção e ordenação por intercalação na mesma máquina. Para entradas de tamanho n, a ordenação por inserção é executada em 8n^2 etapas, enquanto a ordenação por intercalação é executada em 64n lg (n) etapas. Para que valores de n a ordenação por inserção supera a ordenação por intercalação?
Elaborando uma tabela com três colunas, n, tempo para o algoritmo por inserção e o tempo para o algoritmo por intercalação tem-se a tabela abaixo. O algoritmo por inserção tem menos etapas para n variando de 1 a 31, depois disso, ou seja, para n>26 o algoritmo por intercalação tem menos etapas. Foi utilizado lg = log na base 2.

n 8*n^2 64*n*ln(n)
1 8.00 0.00
2 32.00 88.72
3 72.00 210.93
4 128.00 354.89
5 200.00 515.02
6 288.00 688.04
7 392.00 871.77
8 512.00 1,064.67
9 648.00 1,265.60
10 800.00 1,473.65
11 968.00 1,688.12
12 1,152.00 1,908.41
13 1,352.00 2,134.04
14 1,568.00 2,364.60
15 1,800.00 2,599.73
16 2,048.00 2,839.13
17 2,312.00 3,082.54
18 2,592.00 3,329.71
19 2,888.00 3,580.44
20 3,200.00 3,834.54
21 3,528.00 4,091.84
22 3,872.00 4,352.19
23 4,232.00 4,615.45
24 4,608.00 4,881.49
25 5,000.00 5,150.20
26 5,408.00 5,421.47
27 5,832.00 5,695.21
28 6,272.00 5,971.31
29 6,728.00 6,249.70
30 7,200.00 6,530.30
31 7,688.00 6,813.03


1.2-3 Qual o menor valor de n tal que um algoritmo cujo tempo de execução é 100n^2 funciona mais rápido que um algoritmo cujo tempo de execução é 2^n na mesma máquina.
Elaborando uma tabela com três colunas, n, tempo para o algoritmo 1 e o tempo para o algoritmo 2 tem-se a tabela abaixo. O algoritmo 2 é melhor até n=14, a partir de n=15 o algoritmo 1 tem melhor desempenho.
n 100^n 2^n
0 0 1
1 100 2
10 10000 1024
14 19600 16384
15 22500 32768


https://meitcher.wordpress.com/2015/01/27/1-2-algoritmos-como-tecnologia/
http://clrs.skanev.com/

sexta-feira, 26 de junho de 2015

Replicação Postgresql utilizando SLONY (Instalação)

Necessitei trabalhar com replicação de banco de dados pensando em alta disponibilidade de acesso aos dados. O local onde o servidor de dados esta instalado não possui um no break. Tenho que fazer uma migração para outro local, porém como todos os sistemas acessam este banco de dados, não conseguia pensar em uma estratégia para esta migração.

A solução que implantamos faz o seguinte:

 
As minhas informações são gravadas no Banco 1. Todas as minhas aplicações estão apontando para o Banco 1. A estratégia adotada foi replicar o Banco 1 no site 1 para o Banco 2 no site 2. Tanto o banco como o ambiente do Site 2 são mais atualizados que do site 1.

Assim que as aplicações forem atualizados pode-se desligar o site 1 ou inverter a replicação.

Para replicação utilizei o Slony. A escolha do Slony aconteceu antes de entender todas as possibilidades de replicação que o Postgresql oferece.
Para instalação do Slony 2.2.4 em ambiente linux, segui a receita:

1) Baixar o Slony do site http://slony.info/downloads/, quando escrevi este post, a versão mais atualizada disponível era: slony1-2.2.4.tar.bz2.

2) Na pasta onde baixei o pacote, executei o comando:

            tar -vjxf slony1-2.2.4.tar.bz2

faz com que o pacote seja descompactado e cria uma pasta denominda: slony1-2.2.4

3) É necessário ter instalado um compilador C em sua máquina / servidor. No lugar se utilizar o configure.sh que vem na pasta slony1-2.2.4 utilize o configure.sh seguinte:


export PGMAIN=/DBA/postgresql/9.4.1

./configure \
    --prefix=$PGMAIN \
    --bindir=$PGMAIN/bin \
    --datadir=$PGMAIN/share \
    --libdir=$PGMAIN/lib \
    --with-pgconfigdir=$PGMAIN/bin \
    --with-pgbindir=$PGMAIN/bin \
    --with-pgincludedir=$PGMAIN/include \
    --with-pglibdir=$PGMAIN/lib \
    --with-pgsharedir=$PGMAIN/share


onde na variável PGMAIN deve ser inserida a pasta onde esta sua instalação do POSTGRESQL.

Execute do arquivo configure.sh.

Caso você receba a mensagem:

checking PostgreSQL for thread-safety... configure: error: PQisthreadsafe test failed - PostgreSQL needs to be compiled with --enable-thread-safety


Procure em sua máquina, a pasta onde esta instalado o arquivo: libpq-fe.h

find / -name libpq-fe.h
/usr/include/postgresql/libpq-fe.h

Coloque o resultado no arquivo configure.sh na variável with-pgincludedir

export PGMAIN=/DBA/postgresql/9.4.1

./configure \
    --prefix=$PGMAIN \
    --bindir=$PGMAIN/bin \
    --datadir=$PGMAIN/share \
    --libdir=$PGMAIN/lib \
    --with-pgconfigdir=$PGMAIN/bin \
    --with-pgbindir=$PGMAIN/bin \
    --with-pgincludedir=/usr/include/postgresql \
    --with-pglibdir=$PGMAIN/lib \
    --with-pgsharedir=$PGMAIN/share


Execute novamente o arquivo configure.sh

4) Em seguida execute os comandos:

make all

make install

5) Esta instalado o Slony em uma máquina.É necessário repetir procedimento para cada servidor de banco de dados.

6) Para entender como funciona o Slony utilizei o tutorial que encontrei no site:

http://slony.info/documentation/2.2/tutorial.html

Infelizmente tem alguns erros neste tutorial que podem ser resolvidos lendo os arquivos de LOG gerados.



quarta-feira, 20 de maio de 2015

GRANT POSTGRES


Problema: Configurar acesso a um usuário para fazer consultas em TABELAS no NOME_SCHEMA

Comando para garantir acesso ao NOME_SCHEMA

GRANT USAGE ON SCHEMA nome_schema TO usuario

Comando para dar autorização de CONSULTA ao NOME_SCHEMA

GRANT SELECT ON ALL TABLES IN SCHEMA nome_schema TO usuario;