From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Andrei Matei <andreimatei1(at)gmail(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: is ErrorResponse possible on Sync? |
Date: | 2022-01-12 19:39:20 |
Message-ID: | 202201121939.zrszuiavtgy4@alvherre.pgsql |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 2022-Jan-12, Andrei Matei wrote:
> If Sync itself cannot fail, then what is this
> sentence really saying: "This parameterless message (ed. Sync) causes the
> backend to close the current transaction if it's not inside a BEGIN/COMMIT
> transaction block (“close” meaning to commit if no error, or roll back if
> error)." ?
> This seems to say that, outside of BEGIN/END, the transaction is committed
> at Sync time (i.e. if the Sync is never sent, nothing is committed).
> Presumably, committing a transaction can fail even if no
> previous command/statement failed, right?
A deferred trigger can cause a failure at COMMIT time for which no
previous error was reported.
alvherre=# create table t (a int unique deferrable initially deferred);
CREATE TABLE
alvherre=# insert into t values (1);
INSERT 0 1
alvherre=# begin;
BEGIN
alvherre=*# insert into t values (1);
INSERT 0 1
alvherre=*# commit;
ERROR: duplicate key value violates unique constraint "t_a_key"
DETALLE: Key (a)=(1) already exists.
I'm not sure if you can cause this to explode with just a Sync message, though.
--
Álvaro Herrera Valdivia, Chile — https://www.EnterpriseDB.com/
From | Date | Subject | |
---|---|---|---|
Next Message | Andrew Dunstan | 2022-01-12 19:54:13 | Re: support for MERGE |
Previous Message | Andrew Dunstan | 2022-01-12 19:34:00 | Windows vs recovery tests |