[GENERAL] memory leak while trying to update/alter column in postgresql

2014-07-04 Thread Madhurima Das
I am trying to update/alter two columns-comment and id in a table called
xxx using postgresql. Though the compiler does not show any errors but
Valgrind gives major memory leak errors. The code is:

int main()
{
PGconn *conn;
PGresult *res;
int i=0,nFields=0,row=0,col=0;

conn = PQconnectdb("dbname=test1 host=localhost user=postgres
password=yyy");
if(PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database \"%s\" failed.\n",
PQerrorMessage(conn));
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}

res = PQexec(conn, "IF COL_LENGTH('xxx','comment') IS NULL");
if(res)
res = PQexec(conn, "ALTER TABLE xxx ADD comment VARCHAR(500)");
else
res = PQexec(conn, "UPDATE TABLE xxx ADD comment VARCHAR(500)");

res = PQexec(conn, "IF COL_LENGTH('xxx','id') IS NULL");
if(res)
res = PQexec(conn, "ALTER TABLE xxx ADD id VARCHAR(50)");
else
res = PQexec(conn, "UPDATE TABLE xxx ADD id VARCHAR(50)");

  res = PQexec(conn, "SELECT * FROM xxx");
if((!res) || (PQresultStatus(res) != PGRES_TUPLES_OK))
{
fprintf(stderr, "SELECT command did not return tuples properly\n");
PQclear(res);
}

PQclear(res);
PQfinish(conn);

return 0;
}

Valgrind gives the following errors:

$ valgrind --track-origins=yes --leak-check=full ./Gwidd_uniprot_map2 xaa

==4525== Memcheck, a memory error detector
==4525== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==4525== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==4525== Command: ./Gwidd_uniprot_map2 xaa
==4525==
--4525-- ./Gwidd_uniprot_map2:
--4525-- dSYM directory has wrong UUID; consider using --dsymutil=yes
==4525==
==4525== HEAP SUMMARY:
==4525== in use at exit: 262,994 bytes in 751 blocks
==4525==   total heap usage: 1,012 allocs, 261 frees, 345,158 bytes
allocated
==4525==
==4525== 2,248 (200 direct, 2,048 indirect) bytes in 1 blocks are
definitely lost in loss record 400 of 414
==4525==at 0x100011345: malloc (vg_replace_malloc.c:236)
==4525==by 0x10007B7E0: PQmakeEmptyPGresult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008DF30: pqGetErrorNotice3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008CC00: pqParseInput3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007ECD9: parseInput (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007EE3F: PQgetResult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F6F1: PQexecFinish (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F1DC: PQexec (in /usr/lib/libpq.5.dylib)
==4525==by 0x1199A: main (in ./Gwidd_uniprot_map2)
==4525==
==4525== 2,248 (200 direct, 2,048 indirect) bytes in 1 blocks are
definitely lost in loss record 401 of 414
==4525==at 0x100011345: malloc (vg_replace_malloc.c:236)
==4525==by 0x10007B7E0: PQmakeEmptyPGresult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008DF30: pqGetErrorNotice3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008CC00: pqParseInput3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007ECD9: parseInput (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007EE3F: PQgetResult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F6F1: PQexecFinish (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F1DC: PQexec (in /usr/lib/libpq.5.dylib)
==4525==by 0x119B5: main (in ./Gwidd_uniprot_map2)
==4525==
==4525== 2,248 (200 direct, 2,048 indirect) bytes in 1 blocks are
definitely lost in loss record 402 of 414
==4525==at 0x100011345: malloc (vg_replace_malloc.c:236)
==4525==by 0x10007B7E0: PQmakeEmptyPGresult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008DF30: pqGetErrorNotice3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008CC00: pqParseInput3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007ECD9: parseInput (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007EE3F: PQgetResult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F6F1: PQexecFinish (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F1DC: PQexec (in /usr/lib/libpq.5.dylib)
==4525==by 0x119DF: main (in ./Gwidd_uniprot_map2)
==4525==
==4525== 2,248 (200 direct, 2,048 indirect) bytes in 1 blocks are
definitely lost in loss record 403 of 414
==4525==at 0x100011345: malloc (vg_replace_malloc.c:236)
==4525==by 0x10007B7E0: PQmakeEmptyPGresult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008DF30: pqGetErrorNotice3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10008CC00: pqParseInput3 (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007ECD9: parseInput (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007EE3F: PQgetResult (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F6F1: PQexecFinish (in /usr/lib/libpq.5.dylib)
==4525==by 0x10007F1DC: PQexec (in /usr/lib/libpq.5.dylib)
==4525==by 0x119FA: main (in ./Gwidd_uniprot_map2)
==4525==
==4525== LEAK SUMMARY:
==4525==definitely lost: 800 bytes in 4 blocks
==4525==indirectly lost: 8,192 bytes in 4 blocks
==4525==  possibly lost: 0 bytes in 0 blocks
==4525==still reachable: 254,002 bytes in 743 blocks
==4525== suppressed: 0 bytes in 0 blocks
==4

[GENERAL] conditional IF statements in postgresql

2014-07-06 Thread Madhurima Das
Hi,

I am writing a C program to access a PostgreSQL database, where

I add a column if it doesn't exists in the table

or, update the column, if the column already exits.

Please suggest how to work with the conditional statements.

Thanks!

N.B. I wrote the following:

res = PQexec(conn, "IF COL_LENGTH('protein_sequence','comment') IS NULL");
PQclear(res);
if(res)
 {
 res = PQexec(conn, "ALTER TABLE protein_sequence ADD comment
VARCHAR(500)");
 PQclear(res);
 }
 else
 {
 res = PQexec(conn, "UPDATE TABLE protein_sequence ADD comment
VARCHAR(500)");
  PQclear(res);
 }

Is the code logically correct??


[GENERAL] help on using C for postgresql

2014-02-03 Thread Madhurima Das
I am a beginner in Postgresql and trying to write a C++ program to connect
a database and retrieve information from a database.

I have downloaded Postgresql 9.3 in my MAC laptop and could create a
database XXX with a user YYY and password ZZZ. I can create, modify etc
using the pgAdmin3 tool.

Next, I tried connecting the database using the code:

#include 
#include 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[])
{
   try{
  connection C("dbname=XXX user=YYY password=ZZZ \
  hostaddr=127.0.0.1 port=5432");
  if (C.is_open()) {
 cout << "Opened database successfully: " << C.dbname() << endl;
  } else {
 cout << "Can't open database" << endl;
 return 1;
  }
  C.disconnect ();
   }catch (const std::exception &e){
  cerr << e.what() << std::endl;
  return 1;
   }
}

However, the output says: error: pqxx/pqxx: No such file or directory

When I try to install pqxx, I get configure error as:
PostgreSQL configuration script pg_config not found.  Make sure this is in
your
command path before configuring.  Without it, the configure script has no
way to
find the right location for the libpq library and its headers.

I would appreciate your help in solving my problem.

Thanks for your patience!!

Regards
Madhurima