Re: DELETE...RETURNING problem with libpq - Mailing list pgsql-sql

From Brice André
Subject Re: DELETE...RETURNING problem with libpq
Date
Msg-id CAOBG12nZ5fOB7=TeMezVdC9s5rmX-g+3FtW=6cJE8gtRZGcnhw@mail.gmail.com
Whole thread Raw
In response to Re: DELETE...RETURNING problem with libpq  (Guillaume Lelarge <guillaume@lelarge.info>)
Responses Re: DELETE...RETURNING problem with libpq  (Guillaume Lelarge <guillaume@lelarge.info>)
List pgsql-sql
Hello Guillaume,

Thanks for your answer.

Your example is working fine on my computer too (I had to adapt some includes because my client is under Windows, but everything else was fine...).

But, this example is slightly different from my real code : in your example, the delete on the rule really deletes the element. In my code, the delete on the rule tags the element as deleted (with an UPDATE statement and a dedicated column in t1 table).

I slightly changed your example to be more representative of my code. Here are my results :
  • When executing the SQL statement from pgadmin, I get my 81 columns marked as deleted and I get the 81 row results to the query.
  • Whe executing it from your script, the function PQexecPrepared does not return 'PGRES_TUPLES_OK' anymore. It now returns 'PGRES_COMMAND_OK'.
  • From your program, the 81 rows are marked as deleted, as expected.
  • From your program, PQntuples returns the "0" string.
  • I did not try from php, but I expect same behaviour as with my real program...

So, once modified, this example behaves like my program.

I suppose that php and pgadmin use the same interface to execute the query. So, I suppose that there should be a solution to my problem... Do you think it's a bug in my version of libpq ? Or maybe is it related to the fact that I use prepared statement ?

I joined my little test program to this e-mail.

Thanks in advance,

Brice



2013/5/26 Guillaume Lelarge <guillaume@lelarge.info>
On Sat, 2013-05-25 at 14:49 +0200, Brice André wrote:
> Hi Wolfe,
>
> First, thanks for your help.
>
> I tried your code, but it does not work... the function returns a string :
> "0". When I check, this command properly modifies one row, as expected.
>

It works for me with PQntuples.

> I don't know if it may help, but just in case... The DELETE operation is
> not performed on a table : it is performed on a view. I have a rule on that
> view that, instead of performing a delete on the corresponding table,
> performs an update with table entry tagged as deleted (in a dedicated
> column of the table). This code (sql part) works for years and, when
> executing this command by other ways (php and pgadmin), it deletes and
> returns expected data. With libpq, it deletes, but does not return anything.
>

You'll find my test case attached. It's C code, not C++, but I guess it
won't be a big issue :)

It gives me this result:

$ ./example
connection OK
prepare OK
execute OK
ntuples: 81
cleanup OK

81 is the number of lines to delete. If I launch it another time, it
gives me 0 as all the rows have already been deleted.

Hope it helps.


--
Guillaume
http://blog.guillaume.lelarge.info
http://www.dalibo.com

Attachment

pgsql-sql by date:

Previous
From: Guillaume Lelarge
Date:
Subject: Re: DELETE...RETURNING problem with libpq
Next
From: Guillaume Lelarge
Date:
Subject: Re: DELETE...RETURNING problem with libpq