Обсуждение: BUG #1725: psql --command and PQexec do not work and fail silently
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