Tag Archives: PostgreSQL

Como editar queries SQL com um editor de textos no console do PostgreSQL

Essa dica é pra quem usa PostgreSQL e quer editar suas queries dentro de algum editor de texto (como o Vim) sem sair do console do PostgreSQL. Isso é bastante útil quando você precisa rodar uma query complexa diretamente no console.

Primeiramente, verique qual é o seu editor de textos configurado na variável EDITOR:

$ echo $EDITOR
vim

No meu caso, meu editor padrão é o Vim.

Se você não tiver nenhum editor configurado, basta rodar (ou incluir isto no seu arquivo ~/bash_profile:

export EDITOR=vim

Depois, dentro do console do PostgreSQL, basta digitar \e:

psql (9.0.4)
Type "help" for help.

database_name=# \e

E o editor será aberto pra você digitar sua query SQL, o que torna mais confortável e organizado se suas queries forem complexas.

Meu ambiente de trabalho

O Anderson Casimiro e o Augusto Pascutti criaram um meme sobre ambientes de trabalho. As regras são simples:

1. Escreva sobre seu ambiente de trabalho – fale sobre qualquer ponto que quiser;
2. Indique de 3 à 5 pessoas para que possivelmente façam um artigo sobre seu ambiente.

Fui convidado pelo Bruno Codeman para montar minha lista!

1. OS: Ubuntu 10.10

Atualmente, a mais popular distriuição Linux. Como é baseada no Debian, herdou o apt pra gereciar os pacotes. Todo o meu hardware funciona bem e raramente o sistema fica lento ou trava. Ultimamente tem ficado até mais bonito…

2. IDE: Vim

Rápido, flexível, snippets, atalhos produtivos e ainda conta com excelentes plugins. Desenvolvo em Ruby e Ruby on Rails utilizando somente ele e sempre dá conta do recado.

3. Browser: Google Chrome

Há um ano atrás, o experimentei e este substituiu o meu querido Firefox. Com todas as extensions disponíveis hoje, quase não preciso de outro browser, embora exporadiamente use o Firefox pra usar os add-ons WebDeveloper e Firebug.

4. Versionamento: Git

Git ganhou meu respeito. O utilizo há 1 ano e meio e definitivamente me atendeu melhor que o SVN. Não dá pau e é muito eficiente. É atualmente um dos softwares que mais me orgulho de usar.

5. Linguagem de programação: Ruby

Já desenvolvi em PHP, Delphi, Java e até brinquei um pouco com .Net e Phython. Mas nada, nada me faz mais feliz que programar em Ruby. A sintaxe é limpa, o suporte à metaprogramação é ótimo, desenvolver usando BDD é muito fácil e a comunidade é fantástica.

6. Banco de Dados: PostgreSQL

Usei MySQL por muito tempo e me atendia muitíssimo bem. Mas ano passado tive que começar a trabalhar em alguns projetos que usavam PostgreSQL e seu poder me convenceu e se tornou meu database padrão.

Indicação de 5 amigos pra continuar o meme:

1. Eduardo Ramos
2. Vitor Laubé
3. Thiago Aléssio
4. Jésus Lopes
5. Eder Costa

Resumo de comandos úteis do PostgreSQL

Introdução

Este post é um resumo de comandos úteis para administração de banco de dados PostgreSQL.

Instalação

Versão 8.3 no Ubuntu 9.10

sudo aptitude install postgresql-8.3 postgresql-client-8.3 pgadmin3 pgadmin3-data postgresql-server-dev-8.3 libpostgresql-ocaml-dev

Versão 8.4 no Ubuntu 10.04

sudo aptitude install postgresql postgresql-contrib libpq-dev pgadmin3

Criando uma senha

sudo su postgres -c psql postgres
ALTER USER postgres WITH PASSWORD 'sua_senha';

Gerenciar bancos de dados

Criar uma base pelo terminal

createdb -U username -E utf8 dbname -h localhost

Criar uma base pelo psql

create database dbname with owner=postgres encoding='utf8';

Renomear uma base

alter database "old_name" rename to "new_name";

Apagar uma base

drop database dbname;

Backup (dump) e restore

Dump de uma base

pg_dump dbname -h localhost -U postgres > backup.sql

Dump de uma tabela apenas

pg_dump dbname -h localhost -U postgres > backup.sql --table=nome_tabela;

Dump de uma base apenas com algumas tabelas

pg_dump dbname -h localhost -U postgres > backup.sql --table=nome_tabela --table=outra_tabela;

Dump de uma base sem determinada tabela

pg_dump dbname -h localhost -U postgres > backup.sql --exclude-table=nome_tabela;

Dump de uma base excluindo várias tabelas

pg_dump dbname -h localhost -U postgres > backup.sql --exclude-table=nome_tabela --exclude-table=outra_tabela;

Restore de uma base

psql dbname -h localhost -U postgres < backup.sql

Dump dos usuários de uma base

pg_dumpall -g -U postgres -h localhost > users.sql

Comandos especiais em queries

Data

select (current_date + integer '7') as nome_campo;

Veja mais exemplos aqui.

Erros comuns

Duplicate key value violates unique constraint
Ao migrar uma base para PostgreSQL ou fazer alguma coisa errada sem querer, o seguinte erro pode aparecer:
PGError: ERROR: duplicate key value violates unique constraint “tablename_pkey”

Para resolver:

select setval('entities_id_seq', (select max(id) from entities)+1);

Personalizando o psql

alterando o pager

\pset pager off
\pset pager off
\pset pager always
\pset pager occasionally
\pset pager at random

Exebir ‘(null)’ quando um campo for null

\pset null '(null)'

Veja mais configurações aqui.

Ubuntu 10.04 + Ruby on Rails + PostgreSQL 8.4

Atenção:

Esse post é uma cópia do README de um projeto que criei no final do ano passado, afim de organizar o passo-a-passo da instalação das ferramentas que uso (como Rails e PostgreSQL) e também de alguns dotfiles. Atualmente, já existe uma versão mais atual do Ubuntu e algumas coisas deste tutorial podem não funcionar corretamente. Então, recomendo que você verifique o tutorial atualizado na página inicial do projeto: http://github.com/lucascaton/lcaton-setuplinux.

Recentemente atualizei meu Ubuntu para a versão 10.04 e esse script de instalação está atualizado para ser usado nesta versão. Esses passos incluem a instalação do Ruby através do RVM, Rails 2.3.5, PostgreSQL 8.4 e algumas outras coisas. Sempre que eu atualizar o Ubuntu ou mudar algum procedimento ou ainda um dotfile, vou alterar no projeto do github também.


Versão atual: Ubuntu 10.04 (desktop edition – 32 bits)

Instalação básica

Antes de mais nada

sudo aptitude update

Open SSH Server

sudo aptitude install openssh-server

Git & gitg

sudo aptitude install git-core gitg

Curl

sudo aptitude install curl

Suporte à arquivos compactados

sudo aptitude install rar p7zip-full

GTK Record My Desktop e Mencoder / Mplayer

sudo aptitude install gtk-recordmydesktop mplayer mencoder ffmpeg

nmap (Usage ‘sudo nmap -sS ’ pra saber as portas abertas de uma máquina remota)

sudo aptitude install nmap

Criar DVDs e converter vídeos

sudo aptitude install devede

Gimp (a partir da versão 10.04 do Ubuntu o Gimp não vem instalado por padrão)

sudo aptitude install gimp

Fonts true type

sudo aptitude install msttcorefonts

Wine

sudo aptitude install wine

Copiar arquivos deste projeto

git clone git://github.com/lucascaton/lcaton-setuplinux.git ~/.setuplinux

Instalar fonte Monaco

sudo mkdir /usr/share/fonts/truetype/myfonts
cd /usr/share/fonts/truetype/myfonts
sudo cp ~/.setuplinux/files/Monaco_Linux.ttf .
sudo chown root:root Monaco_Linux.ttf
sudo mkfontdir
cd ..
fc-cache

Gvim

sudo aptitude install vim-gnome ncurses-term exuberant-ctags

Vimfiles

mv ~/.vim ~/vim_old
git clone git://github.com/lucascaton/cmarques-vimfiles.git ~/.vim
mv ~/.vimrc ~/vimrc_old
mv ~/.vim/vimrc ~/.vimrc

Gmate

git clone git://github.com/lexrupy/gmate.git
cd gmate && sh install.sh && cd .. && rm -rf gmate

DotFiles

cp ~/.setuplinux/dotfiles/.bashrc ~
cp ~/.setuplinux/dotfiles/.fonts.conf ~
cp ~/.setuplinux/dotfiles/.gemrs ~
cp ~/.setuplinux/dotfiles/.gitconfig ~
cp ~/.setuplinux/dotfiles/.irbrc ~

PostgreSQL

sudo aptitude install postgresql postgresql-contrib libpq-dev pgadmin3

Configurar a senha do PostgreSQL

sudo passwd postgres
su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'sua_senha'" -d template1

Sqlite3

sudo aptitude install sqlite3

JDK

sudo aptitude install openjdk-6-jre-headless

Ruby on Rails

Bibliotecas necessárias

Readline headers

sudo aptitude install libreadline5-dev

C++ compiler (necessário para o Ruby)

sudo aptitude install build-essential

OpenSSL development headers (necessário para o Ruby)

sudo aptitude install libssl-dev

Sqlite support

sudo aptitude install libsqlite3-dev sqlite-dev libdbd-sqlite3-ruby libsqlite3-ruby libsqlite3-ruby1.8

Mysql Client (necessário para a gem ‘mysql’)

sudo aptitude install libmysqlclient15-dev

libxslt (necessário para a gem ‘capybara’)

sudo aptitude install libxslt-dev

Sphinx (necessário para a gem ‘thinking-sphinx’)

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
tar -xzvf sphinx-0.9.9.tar.gz && cd sphinx-0.9.9
./configure --with-pgsql && sudo make && sudo make install
cd .. && rm -rf sphinx-0.9.9

Image Magick (necessário para a gem ‘gruff’)

sudo aptitude install imagemagick libmagick9-dev

Cups Sys (necessário para a gem ‘cups’)

sudo apt-get install libcupsys2-dev

Avahi – dnssd (necessário para a gem ‘specjour’)

sudo apt-get install libavahi-compat-libdnssd-dev

RVM

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

Atualizar RVM

rvm update --head

Rubies

rvm install ree
rvm install ruby-1.9.1
rvm install jruby

Gemset

gem sources -a http://gems.github.com
rvm gemset create caton
cp ~/.setuplinux/files/caton.gems .
rvm gemset import caton.gems
rm caton.gems
rvm --default ree@caton

Outros

Outros softwares:

  • Google Chrome
  • TweetDeck
  • Eclipse (IDE)
  • Skype