Dica rápida postgresql, backup de apenas uma tabela do banco de dados

May 7th, 2010

Tive a necessidade (recorrente, por sinal) de fazer backup e restore de apenas algumas tabelas do banco de dados. Por haver se tornado de certa forma repetitiva, fiz um pequeno script para diminuir a repetição da digitação dos comandos de backup e restore dessas tabelas.

Para realizar o backup de uma determinada tabela, utilizamos:

pg_dump -t nome_da_tabela nome_do_banco > destino_do_backup.sql

Para realizar o restore, basta digitar:

pg_restore -t nome_da_tabela -d nome_do_banco < origem_do_backup.sql

Segue abaixo um exemplo de um script para semi-automatizar a realização do Backup de uma tabela do banco:

#/bin/sh
if [ "$1" = "" ]; then
   clear
   echo "Informe a TABELA para copiar."
   exit 0
 else
   tabela="$1"
 fi

if [ "$2" = "" ]; then
   clear
   echo "Informe o BANCO DE DADOS desejado."
   exit 0
else
   banco="$2"
fi

if [ "$3" = "" ]; then
   clear
   echo "Informe um nome para o Backup."
   exit 0
else
   destino="$3"
fi

su postgres -c "pg_dump -t $tabela $banco > $destino"

Salvei com o nome de backup.sh. Para executar o script, comande pelo console:

sh backup.sh clientes bd_loja bck_loja.sql

Onde:
clientes é o nome da minha tabela
bd_loja é o meu banco de dados
e bck_loja.sql é o arquivo que será gerado com os dados

Ambiente de Desenvolvimento RubyOnRails + Postgresql 8.x

April 24th, 2010

Precisei várias vezes refazer o ambiente de desenvolvimento para RubyOnRails no Ubuntu, principalmente por ser novato nas duas coisas (ruby e linux), e apanhei bastante. Depois de muita "pêia", reuní dicas coletadas de vários blogs e de documentação das próprias ferramentas e resolvi disponibiliza-las aqui, para diminuir as dores de cabeça daqueles que estão iniciando no mundo Ubuntu + RubyOnRails (serve para outras plataformas também, com pequenos ajustes):

Esse "howto" destina-se a quem vai utilizar o Rails com Postgresql, se for utilizar outro gerenciador de banco de dados, pule a etapa 3 e pesquise sobre a melhor forma de instalar o seu gerenciador preferido.

1) Atualizar repositórios do Ubuntu (importante):
$ sudo apt-get update

2) Instalar Bibliotecas Básicas (necessário):
$ sudo apt-get -y install build-essential zlib1g zlib1g-dev libxml2 libxml2-dev libxslt-dev git-core git-doc gitk git-gui libpq-dev make rake libncurses5-dev libreadline

3) Instalar o Postgresql (incluído o gerenciador gráfico pgadmin):
$ sudo apt-get install postgresql-8.3 postgresql-client-8.3 postgresql-client-common postgresql-common postgresql-server-dev-8.3 pgadmin3 pgadmin3-data

Instalação do Ruby (versão 1.8.7)
$ wget -c ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz
$ tar zxvf ruby-1.8.7-p174.tar.gz
$ cd ruby-1.8.7-p174 /ruby-1.8.7-p174
$ ./configure && make && sudo make install (Não apague o diretório de instalação do ruby, vamos precisar dele ainda)

Instalação da lib zlib
$ wget -c http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-VERSÃO.tar.gz (troque VERSÃO pela versão mais atual)
$ tar zxvf ruby-zlib-versao.tar.gz
$ cd ruby-zlib-versão /ruby-zlib-versão
$ ruby extconf.rb && make && sudo make install
$ cd ..
$ rm -rf ruby-zlib-versão

Se der problema de openssl:
$ cd ruby-1.8.7-p174/ext/openssl /ruby-1.8.7-p174
$ ruby extconf.rb && make && sudo make install

Instalação das Gems
$ wget -c http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
$ tar zxvf rubygems-1.3.5.tgz
$ cd rubygems-1.3.5 /rubygems-1.3.5
$ ruby setup.rb /rubygems-1.3.5
$ cd ..
$ rm -rf rubygems-1.3.5

Adicionar source do Git
$ gem sources -c (-c limpa o cache das gems)
$ gem sources -a http://gems.github.com (-a adiciona novo source)

Instalar Rails
$ sudo gem install rake rails

Instalar Adapter para o Postgres
$ sudo gem install postgres

Instalar Servidor Mongrel
$ sudo gem install mongrel

Alguns Plugins Úteis pro Gedit (vai habilitar vários temas e várias ferramentas para trabalhar com rails, teclas de atalho, etc)
$ apt-get install gedit-plugins
$ git clone git://github.com/lexrupy/gmate.git
$ cd gmate && sh install.sh
$ rm -rf gmate

Basicamente é isso. Qualquer erro posta nos comentários que vou ajustando o "howto".

Webrat – Selecionar Registro, dica rápida

April 24th, 2010

Utilizando Factories, fabriquei vários para montar quatro  cenários do cucumber: Listar, Adicionar, Alterar e Excluir (nosso bom e velho CRUD).

A confusão começou quando decidi selecionar o registro que seria excluido no Cenário 4, pois o webrat sempre exclui o primeiro registro. Com a valiosa ajuda de Cassio Marques e Maurício Linhares, consegui resolver e posto aqui. Sempre tem alguém precisando de uma ajuda.

Funcionalidade:
	  Contexto:
	    Dado que existem o(s) seguinte(s) registro(s) de competencias:
	      | mes | ano  |
	      | 01  | 2010 |
	      | 02  | 2010 |
	      | 03  | 2010 |

	  Cenário: Listar Competências
	    Quando eu estiver em Listagem de Competências
	    Então preciso ver o(s) seguinte(s) registro(s):
	      | Mês       | Ano  |
	      | Janeiro   | 2010 |
	      | Fevereiro | 2010 |
	      | Março     | 2010 |

	  Cenário: Alterar uma Competência
	    Dado que estou em Listagem de Competências
	    E sigo para "Alterar" no mes "2"
	    E defino mes como "5"
	    E defino ano como "2010"
	    Quando peço para Salvar
	    Então preciso ver "Competência Alterada com Sucesso."
	    E preciso ver o(s) seguinte(s) registro(s):
	      | Mês       | Ano  |
	      | Janeiro   | 2010 |
	      | Maio      | 2010 |
	      | Março     | 2010 |

Step:

Dado /^sigo para "Alterar" no mes "([^\"]*)"$/ do |mes|
  record = Competencia.find_by_mes mes
  click_link "edit_competencia_#{record.id}"
end

Pequeno Ajuste na Index para montar o Link, pois o webrat não "pega" pelo Texto do Link:

%td
  =link_to "Alterar", edit_gestor_competencia_path(cmpt), :id => dom_id(cmpt, :edit)

A notação que utilizei aqui foi haml, é só trocar para erb ou html.

Pronto. Funcionando:

Abraços,

Até a próxima

Agradecimentos também ao Bruno Grasseli que enviou uma dica muito próxima (quase idêntica) dessa.