December 10th, 2009 in MySQL | No Comments »
Introdução
Uma das formas de tentar otimizar o desempenho do MySQL é identificar possíveis query que estejam consumindo recursos exageradamente do seu banco de dados, por padrão o MySQL vem com o recurso de log desabilitado por questões de desempenho e segurança!
Ativando os Logs
Para ativar o log do MySQL você precisa editar o arquivo /etc/mysql/my.cnf (no ubuntuu) em outras distribuições e windows você terá que achar o arquivo
. Após abrir o arquivo descomente a opção log, tal como segue o exemplo abaixo
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
log = /var/log/mysql/mysql.log
Depois que você ativou os logs será necessário reiniciar o MySQL.
Para ver os logs basta executar no seu terminar o comando.
tail -f /var/log/mysql/mysql.log
Veja como fica:

Referência
http://www.howtogeek.com/howto/database/monitor-all-sql-queries-in-mysql/
December 3rd, 2009 in Postgre | No Comments »
O postgres é um banco de dados relacional sendo assim o TRUNCATE não pode ser executado em uma tabela que seja referenciada por outra tabela através de uma chave estrangeira, então antes de executar o TRUNCATE você precisa desabilitar as TRIGGERS
-- desativa as triggers
UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" = 'tabela';
-- limpa a tabela
TRUNCATE tabela
-- reativa as triggers
UPDATE pg_class SET reltriggers = (SELECT count(*) FROM pg_trigger WHERE pg_class.oid = tgrelid) WHERE relname = 'tabela';
December 3rd, 2009 in Postgre | 1 Comment »
Caso você tenha uma coluna varchar e queira alterar a quantidade de caracteres que ela aceita utilize o seguinte:
ALTER TABLE tabela ALTER COLUMN coluna type varchar(255)

October 10th, 2009 in SQL | No Comments »
O Problema
Executar o comando split no mysql Read more »
September 28th, 2009 in Postgre | No Comments »
Introdução
Este fim de semana eu @battisti e o @asfelix tivemos um problema durante o processo de instalação do php com o postgres, depois de fazer todas as configurações o banco continuava a dar a seguinte mensagem de erro:
Permission denied Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?
Arquivos de Configuração
O postgres possui basicamente 2 arquivos de configurações responsáveis pela conexão, eles são:
- postgresql.conf aqui você precisa definir que o seu banco de dados irá receber conexão através de TCP/IP, até a versão 7.9 do postgres esta configuração era feita assim:
tcpip_socket = true
A partir da versão 8 isso é feito assim: listen_addresses = ‘*’ port = 5432
- pg_hba.conf este é o arquivo que define quem pode acessar o que e de qual forma: para permitir que qualquer IP possa acessar qualquer banco adicione esta linha no arquivo host all all 0.0.0.0 0.0.0.0 password Se quiser que apenas 1 IP específico possa acessar a máquina então host all all 200.200.200.200/32 password A palavra password define que para você acessar o banco tem que digitar a senha, existe a palavra trust que diz ao banco para nao pedir senha então tenha cuidado com este tipo de configuração
Após mexer nestes dois arquivos reinicie o banco. Para acessar o seu banco através do terminal use o comando: psql -h 200.200.200.200 -U postgres -d banco Fique atento aos firewall pois eles podem barrar a sua conexão com o banco, e mais uma dica para que a conexão possa ser estabelecida no CentOS é necessário desativar o SELinux, que por padrão na instalação fica ativado: vim /etc/sysconfig/selinux e configure o SELINUX=disabled
Exemplo de Conexão PHP para Teste
try {
$db = new PDO("pgsql:host=localhost dbname=datacentro user=postgres password=data1234");
$sql = 'SELECT * FROM pessoa';
foreach ($db->query($sql) as $row) {
print $row['cod'] . "\t";
print $row['nome'] . "\t";
}
} catch (PDOException $e) {
print $e->getMessage();
}
die("fim");
Referência
http://www.cyberciti.biz/faq/postgresql-remote-access-or-connection/
http://dickrips.wordpress.com/2009/01/16/apache-php-postgresql-no-centos-e-fedora
August 15th, 2009 in Postgre, SQL | No Comments »
Geralmente temos nos nossos banco de dados uma tabela de log, e ela é o terror dos restores pois o número de registros dela geralmente é igual ou maior do que a soma de todos os registros das demais tabelas do banco, sendo assim, em restores de testes ou apenas de controle não queremos ficar perdendo tempo esperando que os logs sejam restaurados, sendo assim é possível durante um restore pedir que o postgres ignore algumas tabelas para isso: Read more »
July 22nd, 2009 in Postgre, SQL | No Comments »
Introdução
Caso você precise remover os zeros a esquerda/direita através de uma SQL você pode usar o ltrm (esquerda) e o ltrim (direita).
July 14th, 2009 in Postgre, SQL | No Comments »
Introdução
Uma tarefas básica de todo DBA é cuidar para que os backups sejam bem feitos, no postgres as duas ferramentas básicas para isso são os pg_dump e o pg_restore.
Read more »
July 6th, 2009 in SQL | No Comments »
Introdução
Recuperar o valor de horas e minutos a partir de um campo do tipo timestamp.
June 18th, 2009 in Postgre | No Comments »
Introdução
Os campos auto-incremento são geralmente utilizados para definir chaves primárias, o Postgre oferece um recurso chamado sequence para solucionar este problema. O valor de uma seqüência é incrementado em 1 no momento que uma consulta para recuperar o seu valor acontece, ou seja, cada vez que você pede qual o valor atual da seqüência seu valor é incrementado em 1. Read more »
June 18th, 2009 in Postgre, SQL | 5 Comments »
O Problema
A língua portuguesa gera diversos problemas para os DBA, um dos mais comuns esta no fato dos usuários querem digitar Joao (sem acento) em uma caixa de busca e querer que o banco localizar o João (com acento), para solucionar este problema no postgres você pode criar uma function que remove os acentos durante as consultas. Read more »
June 17th, 2009 in Postgre, SQL | No Comments »
Introdução
Uma tabela temporaria (temporary table) é uma tabela como as demais, exceto pelo fato de que ela somente existe enquanto a sessão na qual ela foi criada estiver ativa, ou seja, assim que a conexão com o banco é fechada a tabela temporária é dropada do banco. Em geral este tipo de tabela é usado para armazenar o resultado imediato de uma consulta executada anteriormente.
June 16th, 2009 in Postgre, SQL | No Comments »
Introdução
Criar visões em bancos Postgre Read more »
June 16th, 2009 in SQL | 2 Comments »
O Problema
Precisava selecionar a ultima linha inserida em uma tabela do meu banco de dados. Read more »
June 15th, 2009 in Postgre | No Comments »
O Problema
Cria um campo no postgres que por padrão recebe o timestamp atual.
Conclusão
CREATE TABLE "public"."teste" (
"test_id SERIAL,
"test_timestamp" TIMESTAMP WITHOUT TIME ZONE DEFAULT ('now'::text)::timestamp(6) with time zone,
CONSTRAINT "conveniado_importacao_pkey" PRIMARY KEY("test_id")
) WITH OIDS;
A SQL (’now’::text)::timestamp(6) with time zone vai dizer que o campo ao sofrer qualquer atualização/inserção será alterado para o timestamp corrente.
Mais uma dica, se você quiser saber a versão atual do postgres execute a seguinte query:
May 28th, 2009 in SQL | No Comments »
Introdução
Estamos aqui na empresa a realizar algumas importações de dados que levam muiiito tempo para serem executadas, ai surge aquelas questões básicas, o banco está traavado? qual query está sendo executada nesse momento? Read more »