Pular para o conteúdo

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.
Poleto poleto
Hits: 122.605 Categoria: C/C++ Subcategoria: Banco de Dados
  • Indicar
  • Impressora
  • Denunciar

Introdução


O PostgreSQL é um banco de dados extremamente eficiente, que não deixa a desejar se comparado com os grandes bancos de dados comerciais.

Neste artigo iremos ver, ainda que de forma bem simplificada, uma das muitas formas de interação com este banco de dados, que é usando a linguagem C, através de uma interface de programação disponibilizada pelo PostgreSQL.

   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

Instalando o CMS Drupal 4.7

PostgreSQL - Embutindo comandos SQL no seu código C

Acessando PostgreSQL com C - Cursores

Acessando PostgreSQL com C - Cursores

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

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

PostgreSQL - Embutindo comandos SQL no seu código C

#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

Entre na sua conta para comentar.