Re: DELETE...RETURNING problem with libpq

From: Brice André <brice(at)famille-andre(dot)be>
To: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
Cc: Wolfe Whalen <wolfe(at)quios(dot)net>, "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org>
Subject: Re: DELETE...RETURNING problem with libpq
Date: 2013-05-26 18:35:15
Message-ID: CAOBG12nZ5fOB7=TeMezVdC9s5rmX-g+3FtW=6cJE8gtRZGcnhw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)lelarge(dot)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 Content-Type Size
example.zip application/zip 1.3 KB

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Guillaume Lelarge 2013-05-27 06:56:15 Re: DELETE...RETURNING problem with libpq
Previous Message Guillaume Lelarge 2013-05-26 06:51:19 Re: DELETE...RETURNING problem with libpq