Acessando PostgreSQL com C

O PostgreSQL é um dos principais bancos de dados open source do momento. Veremos neste artigo como acessá-lo utilizando a linguagem C.

[ Hits: 119.781 ]

Por: Poleto em 08/12/2005


Criando o ambiente de testes



Antes de começarmos, vamos partir do princípio que o PostgreSQL já funciona em seu computador e que você tem um banco de dados pronto para ser usado. Também iremos considerar que você já tem um leve conhecimento sobre comandos SQL.

No nosso caso, estamos usando um banco chamado 'TESTE'. Não entraremos em detalhes sobre esses assuntos, pois isto é material suficiente para um outro artigo.

Vamos criar o nosso ambiente de testes usando o psql, que é a ferramenta de linha de comando do PostgreSQL. Caso não saiba usá-la, é bem simples, basta digitar o comando "psql" na linha de comando, finalizando com um ponto-e-vírgula (;).

Para o nosso ambiente de testes, iremos precisar apenas de uma tabela. Iremos criá-la com o comando abaixo:

CREATE TABLE contatos(
    email varchar(255),
    nome varchar(255)
);

Digitando no psql, teremos o seguinte (a palavra 'TESTE' que aparece é o nome do nosso banco de dados):

TESTE=> CREATE TABLE contatos
TESTE=> (
TESTE=>   email varchar(255),
TESTE=>   nome varchar(255)
TESTE=> );

(note que o comando só é executado quando temos um ';'). Ao pressionar enter no final do comando acima, teremos o seguinte resultado:

teste=> CREATE TABLE

Pronto, nossa tabela está criada e pronta para ser usada.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Criando o ambiente de testes
   3. Libpq
   4. Rotinas para conexão
   5. Inserindo, atualizando e removendo dados
   6. Recuperando dados
   7. Considerações finais
Outros artigos deste autor

Acessando PostgreSQL com C - Cursores

Instalando o CMS Drupal 4.7

PostgreSQL - Embutindo comandos SQL no seu código C

Leitura recomendada

Acessando PostgreSQL com C - Cursores

Ensaio acerca de bibliotecas de código aberto para abstração de acesso a banco de dados em linguagem C++

Usando MySQL na linguagem C

Embutindo um banco de dados SQLite em sua aplicação C++

PostgreSQL - Embutindo comandos SQL no seu código C

  
Comentários
[1] Comentário enviado por cbov em 08/12/2005 - 04:16h

muito bom artigo.
eu imaginava ser mais complicado, pelo fato do unico banco que acessei usando C foi o oracle, qual tinha que dar algumas voltas ate gerar o binario

[2] Comentário enviado por teovictor em 08/12/2005 - 12:00h

Se a intenção era ser um pontapé inicial, saiba que foi um pontapé certeiro. :) Muito bom para começar a usar o PostgreSQL em C e muito bem explicado.

[3] Comentário enviado por bestlinux em 08/12/2005 - 13:12h

Parabéns pelo artigo...

Não sabia que o PostgreSQL "conversava" com C :-)

Muito interessante...

Falow !

[4] Comentário enviado por Serafim em 08/12/2005 - 14:35h

Muito interessante o seu artigo. Não sabia que o PostgreSQL podia ser usado no C.

[5] Comentário enviado por lennon.jesus em 09/12/2005 - 13:52h

Show de bola!
Gostei muito.
Quando tiver tempo vou testar!

Abraços,
Lennon Jesus

[6] Comentário enviado por rjesus em 13/03/2007 - 11:19h

Olá, sou novo no linux, utilizoo o SUSE versão 10.1, tentei executar o exemplo que foi passado acima e obtive o seguinte resultado :
suse:/usr/include/pgsql # gcc $(pkg-config --libs --cflags gtk+-2.0) -g teste1.c
/tmp/ccc0dzwL.o: In function `main':
/usr/include/pgsql/teste1.c:13: undefined reference to `PQconnectdb'
/usr/include/pgsql/teste1.c:15: undefined reference to `PQstatus'
/usr/include/pgsql/teste1.c:28: undefined reference to `PQexec'
/usr/include/pgsql/teste1.c:21: undefined reference to `PQerrorMessage'
/usr/include/pgsql/teste1.c:22: undefined reference to `PQfinish'
/usr/include/pgsql/teste1.c:36: undefined reference to `PQresultStatus'
/usr/include/pgsql/teste1.c:42: undefined reference to `PQresultErrorMessage'
/usr/include/pgsql/teste1.c:45: undefined reference to `PQcmdTuples'
/usr/include/pgsql/teste1.c:53: undefined reference to `PQclear'
/usr/include/pgsql/teste1.c:59: undefined reference to `PQfinish'
collect2: ld returned 1 exit status
Alguêm poderia me ajudar ???
Obigado!

[7] Comentário enviado por seferzohar em 06/11/2007 - 16:13h

rjesus
Vc esta compilando o exemplo com as flags erradas para o linker (ld)
pkg-config --libs --cflags gtk+-2.0 gera as flags necessarias para compilacao de programas gráficos utilizando a biblioteca gtk, desnecessária neste exemplo. Para compilar-lo vc precisa que o linker ligue o seu programa a biblioteca libpq, que implementa as funcoes acima.
O seu teste provavelmente irá compilar com o seguinte comando:

gcc -lpq -o teste1 teste1.c

[8] Comentário enviado por albertguedes em 19/02/2008 - 19:41h

Quem estiver comproblemas de erro de compilação, criem um arquivo
'Makefile' e coloquem nele estas linhas

----
<programa>: <programa>.o
gcc -O -o <programa> <programa>.o -lpq

<programa>.o: <programa>.c
gcc -c -O -o <programa>.o <programa>.c -I/usr/include/postgresql/
-----

Eu testei e compila todos os código feito no artigo do Poleto, e ainda otimiza com a opção "-O".

Depois para compilar é só dar

$ make

no mesmo diretorio onde tenha o 'Makefile' e terá o programa compiladinho.

[9] Comentário enviado por netmorais em 30/06/2008 - 16:04h

Poleto
Voce sabe se existe a biblioteca estática libpq para windows (libpq.a ...).
Instalei o Postgres 8.3 num xp e na pasta .../lib só encontro .dll.
Grato
Sergio.
netmorais@bol.com.br

[10] Comentário enviado por poleto em 30/06/2008 - 18:13h

netmorais,

Nunca tentei utilizar a libpq a partir do windows.
Mas, acredito que não seja muito diferente, só que, ao invés de usar uma biblioteca com extensão .so, você vai usar uma dll. Se o nome não for o mesmo (libpq.dll, tente pq.dll). De resto, use o procedimento normal do desenvolvimento sobre windows para carregar a dll.

Abraços,
Luiz Poleto

[11] Comentário enviado por fabiomattes2011 em 01/09/2008 - 17:52h

Esta biblioteca também funciona no c++, ou tem alguma outra?

[12] Comentário enviado por poleto em 01/09/2008 - 17:54h

gelheadbanger,

Teoricamente, não existe motivos para não funcionar.
Qualquer coisa, só perguntar.

Abraços,
Luiz Poleto

[13] Comentário enviado por fabiomattes2011 em 03/09/2008 - 16:20h

vo testar aqui com c++... qualquer posto aqui se funcionou... valeu poleto.

[14] Comentário enviado por fabiomattes2011 em 03/09/2008 - 17:22h

Kra consegui conectar no c++ mais teve algumas alterações, segue abaxo o código que usei:

#include <iostream>
#include "libpq-fe.h"

using namespace std;

/* Conexão com o banco */
PGconn *conn = NULL;

int main()
{
/* realiza a conexão */
conn = PQconnectdb("host=localhost dbname=TESTE user=admin password=mnpinfo459");

if(PQstatus(conn) == CONNECTION_OK)
{
cout << "Conexão efetuada com sucesso!";
}
else
{
cout << "Falha na conexão. Erro " << PQerrorMessage(conn);
PQfinish(conn);
return -1;
}

/* Verifica se a conexão está aberta e a encerra */
if(conn != NULL)
PQfinish(conn);

depois é só compilar com:
g++ -o programa -I/usr/include/postgresql/ programa.cpp -lpq

[15] Comentário enviado por Azraelm em 19/08/2015 - 04:30h

Boa, valeu pela contribuição.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts