#bancoDeDados, #configuração

Como solucionar o erro de domain socket no PostgreSQL


Olá pessoal.

Novamente ao instalar o PostgreSQL eu me esbarrei com o erro:

Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Este é um erro conhecido e frequente, já tive ao instalar o PostgreSQL no Mac OS e agora tive ao instalar no Ubuntu em uma instância na Amazon AWS. O erro acontece ao tentar conectar no banco de dados, via psql ou pelo comandos do PostgreSQL (ex.: createuser).

Após várias pesquisas e testes cheguei à solução que compartilho aqui.

Por algum motivo que desconheço o PostgreSQL não define nenhum valor para a variável unix_socket_directory, mas de alguma forma a criação da conexão fica procurando pela pasta /var/run/postgresql.

A primeira coisa a ser feita é definir um local para unix_socket_directory, e este local não pode ser dentro da pasta /var/run/postgresql porque até onde vi o conteúdo desta pasta não é persistente e o erro volta a acontecer após um reboot.

Então no arquivo /usr/local/pgsql/data/postgresql.conf defina um valor para a variável unix_socket_directory:

unix_socket_directory = '/tmp/postgresql'

Agora é preciso criar a pasta que será utilizada pelo socket:

sudo mkdir /tmp/postgresql

E definir as permissões para o usuário postgres e para o grupo de usuários denominado ubuntu:

sudo chown -R postgres /tmp/postgresql
sudo chgrp -R ubuntu /tmp/postgresql

Também é preciso criar o diretório de dados:

sudo mkdir -p /usr/local/pgsql/data

E definir as permissões:

sudo chown -R postgres:postgres /usr/local/pgsql/

Feito isso iremos alterar o acesso para o usuário postgres:

sudo su - postgres

Acesse o diretório dos executáveis:

cd /usr/lib/postgresql/9.1/bin/

Inicialize a área de dados:

./initdb -D /usr/local/pgsql/data

Inicie o servidor PostgresSQL:

./postgres -D /usr/local/pgsql/data

Eu também alterei o conteúdo do script de inicialização do PostgreSQL para passar as novas configurações. E o meu arquivo /etc/init.d/postgresql ficou assim:

#!/bin/sh -e
PGVER='9.1'
BINPATH="/usr/lib/postgresql/$PGVER/bin/"
PGUSER='postgres'
PGLOG='/tmp/postgresql/pgsql.log'
PGDIR='/usr/local/pgsql/data'

start(){
   cd $BINPATH
   su $PGUSER -c "./pg_ctl -D $PGDIR -l $PGLOG start"
}

stop(){
   cd $BINPATH
   su $PGUSER -c "./pg_ctl -D $PGDIR -l $PGLOG stop"
}

case "$1" in
   start)
      start
      ;;
   stop)
      stop
      ;;
   restart)
      stop
      start
      ;;
   *)
      echo "Usage: $0 {start|stop|restart}"
      exit 1
      ;;
esac

exit 0

Agora é possível iniciar, parar e reiniciar o PostgreSQL com os comandos:

sudo /etc/init.d/postgresql start
sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql restart

E acessar a interface do PostgreSQL com o comando:

sudo su - postgres
psql

That’s all folks!!!

Até breve 😉

Referências:

http://goo.gl/HQC3j

http://goo.gl/UZRGT

http://goo.gl/j4eTP

Anúncios
Padrão
#bancoDeDados, #desenvolvimento

Como comparar e converter CHAR para DATE em 4GL?


Olá pessoal.

Este post é bem rapidinho com uma dica extremamente simples para quem precisa converter um valor do tipo char em date. Quem já precisou buscar alguma coisa relacionado a 4GL e Progress sabe o quão difícil é encontrar uma resposta satisfatória. Às vezes nem o Stack Overflow resolve.

Então, vamos ao código.


/* Cria as variáveis para o intervalo de data. */
define variable valor-inicial as char.
define variable valor-final as char.

define variable data-inicial as date format "99/99/9999".
define variable data-final as date format "99/99/9999".

/* Atribui os valores  às variáveis do tipo char. */
assign valor-inicial = "01/01/2013".
assign valor-final = "01/06/2013".

/* Converte os valores do tipo char para date. */
assign data-inicial = date(valor-inicial).
assign data-final = date(valor-final).

/* Compara o intervalo. */
For each sua_tabela
   where data_para_comparar >= data-inicial
     and data_para_comparar <= data-final.

   disp data_para_comparar.

Isso é tudo, espero que seja útil pra alguém.

Até breve 😉

Referência:

How to convert a date integer to a date format

Padrão
#bancoDeDados

PostgreSQL na prática


Assim como grande parte dos desenvolvedores, meu primeiro contato com banco de dados foi utilizando o MySQL.  Com o passar do tempo tive a oportunidade de trabalhar com o PostgreSQL que é um sistema gerenciador de banco de dados objeto relacional. Desde então eu passei a utilizá-lo principalmente em projetos em que utilizo o Hibernate.

Atualmente administro bases de dados alocadas no PostgreSQL e para isso tive que conhecê-lo além das conexões com os sistemas. Portanto, meu objetivo com este post é mostrar o uso de alguns comandos básicos que auxiliam o desenvolvedor na manutenção da base de dados.

Se você ainda não instalou o PostgreSQL, dê uma olhada neste post.

Comandos usados no terminal

Logar no terminal como root e alterar para o usuário postgres:


# su - postgres

Exportar/Backup/Dump de apenas um banco de dados:


$ pg_dump nome_do_banco > nomeDoArquivoDeSaida

Importar/Restore de apenas um banco de dados:


$ psql nome_do_banco < nomeDoArquivoDeEntrada

Exportar/Backup/Dump de todos os banco de dados:


$ pg_dumpall > nomeDoArquivoDeSaida

Importar/Restore de todos os banco de dados:


$ psql -f nomeDoArquivoDeEntrada

Criar usuário:


$ createuser nome_do_usuario

Deletar usuário:


$ dropuser nome_do_usuario

Criar banco de dados:


$ createdb nome_do_banco

Deletar banco de dados:


$ dropdb nome_do_banco

Entrar no shell interativo do PostgreSQL:


$ psql

Comandos no shell interativo do PostgreSQL

Criar usuário:


postgres=# CREATE ROLE nome_do_usuario;

Criar banco de dados:


postgres=# CREATE DATABASE nome_do_banco;

Cria um banco de dados com um usuário/dono específico:


postgres=# CREATE DATABASE nome_do_banco OWNER nome_do_usuario;

Alterar senha:


postgres=# ALTER USER nome_do_usuario WITH PASSWORD ‘senha’;

Deletar usuário:


postgres=# DROP ROLE nome_do_usuario;

Deletar/Drop banco de dados:


postgres=# drop database nome_do_banco;

Para sair do shell interativo do PostgreSQL:


postgres=# \q

Espero que possa ser útil.
Até breve 😉

Padrão