Thread: BUG #1725: psql --command and PQexec do not work and fail silently

BUG #1725: psql --command and PQexec do not work and fail silently

From
"Charlie Monkton"
Date:
The following bug has been logged online:

Bug reference:      1725
Logged by:          Charlie Monkton
Email address:      charlie@hwhc.net
PostgreSQL version: 7.4.6
Operating system:   Solaris 9
Description:        psql --command and PQexec do not work and fail silently
Details:

Create the following tables:

create table test
(
        i       int primary key not null
);
create table test_ref
(
        i       int references test(i) on delete cascade
);

Executing the following SQL via the psql -c option (or PQexec does not
work:

psql  -c "delete from test;insert into test values ( 1 );insert into
test_ref values ( 1 );"
INSERT 30816 1

#select * from test_ref;
 i
---
(0 rows)

echo "delete from test;insert into test values ( 1 );insert into test_ref
values ( 1 );" | /usr/local/pgsql/bin/psql
DELETE 1
INSERT 30813 1
INSERT 30814 1

# select * from test_ref;
 i
---
 1
(1 row)

This is very bad as multiple statement executed by PQexec fail and do not
return an error message.
"Charlie Monkton" <charlie@hwhc.net> writes:
> Executing the following SQL via the psql -c option (or PQexec does not
> work:

> psql  -c "delete from test;insert into test values ( 1 );insert into
> test_ref values ( 1 );"

In 7.4 and before, test's ON DELETE trigger won't be fired until the end
of that command string, so it deletes both the old and new rows in
test_ref.  We changed the timing of trigger firing in 8.0, and now that
example works as you expect.

            regards, tom lane