Desenvolvendo uma aplicação com acesso a Bancos de Dados utilizando Mono e PostgreSQL (parte 1)

Tiago Paranhos Lima

Instalando e Configurando o PostgreSQL

Por quê o PostgreSQL?

O PostgreSQL é um banco de dados sólido e maduro, que está se aproximando da versão 8.0. Dentre as muitas novidades dessa nova versão, está o suporte nativo à Win32, o que permitirá que este RDBMS possa ser executado nativamente nos Windows NT4, 2000, XP e 2003.

A escolha desse Banco para uso neste tutorial recaiu principalmente pelos recursos que ele fornece (que muitas vezes o fazem ser comparado a bancos de dados "pesos-pesado" como o Oracle), e por não haverem questões de licenciamento que impeçam o PostgreSQL de ser utilizado sem restrições em aplicações comerciais, tanto as de código aberto quanto as de código fechado. Além disso, temos um brasileiro (Francisco Figueiredo Jr.) como um dos principais membros do projeto NPgsql, um provedor para acessar bases de dados PostgreSQL em Mono/.NET.

Instalando o PostgreSQL

A maneira mais fácil de instalar o PostgreSQL no Linux é a partir dos CDs de instalação de sua distribuição favorita. No caso do Fedora Core 2, basta fazer o seguinte:

No ambiente GNOME, clique no ícone "Comece Aqui". Clique em Configurações do Sistema, e depois em "Adicionar/Remover Aplicações". Aguarde então a verificação do status dos pacotes.

Desça com o mouse até a seção "Servidores". Marque a opção "Servidor de Base de Dados SQL" e clique no link "Detalhes". Selecione então a opção "postgresql-server" e clique em "Sair". Você voltará então para a tela "Adicionar ou Remover Pacotes". Clique então no botão Atualizar na parte inferior desta janela. O sistema irá solicitar os CDs de instalação de seu Fedora Core 2, então tenha-os à mão e insira os que forem solicitados.

Após a instalação dos mesmos, você tem um banco de dados PostgreSQL pronto para funcionar.

Antes de prosseguir, verifique se o serviço postgresql foi ativado após a instalação dos pacotes.

Para isso, digite o seguinte comando em um terminal:

ps -A | grep postmaster 

Se esse comando retornar alguma coisa, como por exemplo:

2149 ? 00:00:00 postmaster
2168 ? 00:00:00 postmaster
2169 ? 00:00:00 postmaster

Isto quer dizer que o servidor foi ativado. Você precisará então encerrá-lo (poderão ser necessários privilégios de root para isso):

killall postmaster

Configurando o PostgreSQL

Agora você precisa mudar para o usuário postgres:

su postgres

Digite então:

postmaster -i -D /var/lib/pgsql/data &

Na primeira vez em que é executado, este comando inicializa a base de dados PostgreSQL, bem como cria os arquivos de configuração do mesmo, no diretório indicado.

Para esse tutorial, vamos criar um usuário chamado "mono" para usar em nossas conexões com o banco.

Para isso, digite o seguinte comando:

createuser mono

Isso criará o usuário mono no PostgreSQL. Este usuário será usado toda vez que desejarmos nos conectar à base de dados PostgreSQL.

Um último ajuste se faz necessário. Teremos que editar o arquivo postgresql.conf, localizado no diretório /var/lib/pgsql/data (no caso do Linux Fedora Core 2). Se você não encontrar esse caminho, faça uma busca pelo arquivo postgresql.conf pela sua partição linux utilizando os utilitários kfind (KDE) ou gnome-search-tool (Gnome).

Este arquivo deverá ser editado porque a maioria das distros hoje em dia empacotam o PostgreSQL de forma que ele receba solicitações de acesso através de um socket unix, não um socket tcp. Assim, quando tentamos acessar uma tabela PostgreSQL através do Mono, por exemplo, via TCP/IP, recebemos o erro "Connection Refused".

Descomente as linhas abaixo do arquivo postgresql.conf. Elas estão logo no início do arquivo. Precisamos setar a propriedade tcpip_socket para true e habilitar a porta 5432 para receber nossas conexões:

tcpip_socket = true
port = 5432

Nos resta ainda configurar o arquivo pg_hba.conf, localizado no mesmo diretório onde está o arquivo postgresql.conf. No exemplo abaixo, o arquivo foi configurado para aceitar acesso à base PostgreSQL localmente (127.0.0.1) e remotamente, a partir das máquinas com IP 192.168.0.1 e 192.168.0.2 :

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
local all all trust
host all all 127.0.0.1 255.255.255.255 trust
host all all 192.168.0.1 255.255.255.255 trust
host all all 192.168.0.2 255.255.255.255 trust
# IPv4-style local connections:
host all all 127.0.0.1 255.255.255.255 trust
host all all 192.168.0.1 255.255.255.255 trust
host all all 192.168.0.2 255.255.255.255 trust
# IPv6-style local connections:
#host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff trust

Para que as alterações tenham efeito, encerre mais uma vez o servidor PostgreSQL com o comando "killall postmaster", e reinicie-o novamente com o comando "postmaster -i -D /var/lib/pgsql/data &".

Uma boa idéia é utilizar o gerenciador de serviços da sua distribuição linux para ativar o serviço postgresql (ou postmaster) durante o boot.

Termina aqui a parte de configuração do RDBMS PostgreSQL. Vamos agora instalar uma ferramenta gráfica para facilitar a manipulação de nossas tabelas. O nome dela é phpPgAdmin. Como o próprio nome indica, ela foi inspirada na ferramenta phpMyAdmin, usada para gerenciar bases de dados MySQL.

Instalando o phpPgAdmin

O phpPgAdmin é um script PHP que nos facilita várias tarefas de gerenciamento de um servidor de bancos de dados PostgreSQL, desde a criação de tabelas, views e execução de sentenças SQL até a criação de usuários, etc. Para podermos utilizar essa ferramenta, precisamos de um servidor Apache com suporte a PHP. Nossa instalação de PHP deve ainda ter sido compilada com suporte a bases PostgreSQL. Para isso, você deve ter os pacotes php, apache e php-pgsql instalados. No caso do Fedora 2, mais uma vez, basta instalar os pacotes citados anteriormente.

Vamos então à instalação do phpPgAdmin. Você pode fazer o download dele aqui .

Após concluído o download, copie o arquivo para a pasta /var/www/html, ou para o local onde você definiu que as páginas html do servidor apache ficam armazenadas. Descompacte-o então nessa pasta e renomeie o diretório, após descompactado, para phpPgAdmin. Agora, em seu browser preferido, acesse o endereço:

http://localhost/phpPgAdmin

No caso de erros, certifique-se de que o seu servidor apache está rodando.

Se você estiver visualizando a página de login, tudo transcorreu corretamente.

Criando uma tabela com o phpPgAdmin

Vamos agora criar uma tabela para utilizarmos durante esta série de artigos. Para isso, vamos utilizar a ferramenta phpPgAdmin, que instalamos no passo anterior.

No browser de sua preferência, acesse o seguinte endereço:

http://localhost/phpPgAdmin

Você estará então na tela de login. No campo "Username", vamos digitar "mono". O campo "Password" pode ficar em branco, pois não definimos uma senha para o nosso usuário mono. Em Language, vamos selecionar "Português-Brasileiro". Após isso, clique no botão "login".

Surgirá então uma nova tela, com um pequeno painel à esquerda e uma grande área à direita, onde podemos visualizar todas as bases de dados de nosso servidor PostgreSQL. Provavelmente, após a instalação do servidor, não veremos nenhuma base nesse painel, pois ainda não criamos nenhuma.

Clique então no link chamado "PostgreSQL" do painel esquerdo. Logo em seguida, no painel da direita, clique em "Criar banco de dados". No campo "nome", digite "dbmonoteste". Em "codificação", selecione "UNICODE". Clique então no botão "Criar".

Se você observar agora o painel da esquerda, verá que existe um ícone chamado "dbmonoteste". Isto indica que a nossa base de dados foi criada com sucesso, e que está pronta para uso. Vamos clicar então no ícone "dbmonoteste" de nosso painel esquerdo. Na árvore que se abriu abaixo de "dbmonoteste", clique em "Tabelas". No painel direito teremos então um link "Criar tabela". Clique neste link.

No campo "Nome", digite "linguagens_mono". Em "Número de Campos", digite "2". Clique então no botão "Próximo". No campo 1, digite em "Campo", "codigo". Em "Tipo", selecione "integer". Marque a opção "Não nulo". No campo 2, digite em "Campo", "descricao". Em "Tipo", selecione "character varying". Em "Extensão", digite "50". Marque a opção "Não nulo".

Clique então no botão "Criar". Pronto, nossa tabela acaba de ser criada. Vamos agora inserir alguns valores nessa tabela. Para isso, ainda no painel da direita, na linha "linguagens_mono", clique no botão "Inserir".

No campo "codigo", em "Valor", digite "1". No campo "descricao", digite "C#". Clique em "Salve & Repita". No campo "codigo", em "Valor", digite "2". No campo "descricao", digite "ASP.NET". Clique em "Inserir", pois este será o último registro que acrescentaremos à nossa tabela.

Voltamos então para a tela que contém todas as tabelas de nossa base de dados. Na linha da tabela "linguagens_mono", vamos clicar agora no botão "Navegar". Como podemos ver, foram inseridos em nossa tabela os 2 registros que digitamos, então tudo transcorreu corretamente.

Para sair do gerenciador phpPgAdmin, clique no link chamado "Deslogar", que está no cabeçalho da página. Nosso próximo passo, e o último deste artigo, será acessar essa tabela em um programa Mono, através da linguagem C#. Testando nossa conexão ao PostgreSQL com o Mono

Bom, temos até agora um servidor RDBMS, uma base de dados e uma tabela nessa base. É hora de testarmos então o acesso a essa base com o Mono. Para isso, iremos criar um programa C#, salvando o conteúdo do código abaixo como TesteMonoSQL.cs

using System;
using Npgsql;
class MainClass
{
     public static void Main(string[] args)
     {
          String strConexao = "Server=127.0.0.1;" +
               "Port=5432;" +
               "User Id=mono;" +
               "Password=;" +
               "Database=dbmonoteste;";
          //cria a conexao
          NpgsqlConnection conexao = new NpgsqlConnection(strConexao);
          //prepara o comando sql da consulta
          NpgsqlCommand comandoSql = 
           new NpgsqlCommand("select descricao from linguagens_mono",conexao);
          //abre a conexao e executa a consulta
          conexao.Open();
          NpgsqlDataReader dados = comandoSql.ExecuteReader();
          Console.WriteLine("Acessando PostgreSQL em C# utilizando o Npgsql");
          //loop para varrer a consulta e mostrar o resultado do campo nome
          while (dados.Read())
          {
               Console.WriteLine("Nome: " + dados["descricao"]);
          }
          //Fecha a Conexao
          conexao.Close();
          Console.WriteLine("Pressione qualquer tecla para sair...");
          Console.ReadLine();
     }
}

Para compilar o programa acima:

mcs TesteMonoSQL.cs -r System.Data.dll -r Npgsql.dll

Para executá-lo:

mono TesteMonoSQL.exe

O programa irá mostrar, na saída do console, o conteúdo de todos os campos descrição.

Neste primeiro artigo, colocamos um servidor PostgreSQL para funcionar, criamos uma base de dados e uma tabela nesta base. Fizemos ainda um pequeno teste para mostrar de que forma se processa a conexão com um banco PostgreSQL. Mas isto não é suficiente para desenvolvermos uma solução completa em Mono. No próximo artigo, iremos avançar um pouco mais, desenhando uma interface gráfica a partir do construtor de interfaces GLADE. Até a próxima!

PostgreSQLBR: Parte1 Instalando e Configurando o PostgreSQL (last edited 2006-10-31 15:00:28 by DiogoBiazus)