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)

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 »
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 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: