Concurrent insert question

Started by u15074about 23 years ago2 messagesgeneral
Jump to latest
#1u15074
u15074@hs-harz.de

I have the following table:

create table test(
key int8,
length int4,
level int4,
pu oid,
primary key(key));

Now I have two concurrent transactions:

At the time the transactions start, there does't exist a row with value 1 for
the key column.

time transactionA:
1 begin;
2 set transaction level serializable;
3 insert into test(1,..,..,..);
4
5 commit;

time transactionB:
1 begin;
2 set transaction level serializable;
3
4 insert into test(1,..,..,..);
5
6 commit;

So my question is, what happens with the insert of transactionB?
Since a row with primary key value 1 doesn't exist within transactionB when
executing the insert-statement, it shouldn't be a problem within the
transaction.
But if so, how will the constraint be fullfilled? Will transactionB be aborted?
Is there a difference running in transaction level serializable or readcommited?

-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/

#2Amin Abdulghani
amin@quantiva.com
In reply to: u15074 (#1)
Re: Concurrent insert question

i) If both A and B run concurrently then either one can
finish before the other. Since the isolation is
serlizable, a transaction can only see rows committed
before its start.
So if they both start at the same time,and A commits
before B. Then B would throw an error at the commit
statement.

ii) If B was "read committed" and A had committed before
B's insert then B would throw an error during the
"insert" call.

Regards..
Amin

On Mon, 24 Mar 2003 09:38:06 +0100
u15074 <u15074@hs-harz.de> wrote:

Show quoted text

I have the following table:

create table test(
key int8,
length int4,
level int4,
pu oid,
primary key(key));

Now I have two concurrent transactions:

At the time the transactions start, there does't exist a
row with value 1 for
the key column.

time transactionA:
1 begin;
2 set transaction level serializable;
3 insert into test(1,..,..,..);
4
5 commit;

time transactionB:
1 begin;
2 set transaction level serializable;
3
4 insert into test(1,..,..,..);
5
6 commit;

So my question is, what happens with the insert of
transactionB?
Since a row with primary key value 1 doesn't exist within
transactionB when
executing the insert-statement, it shouldn't be a problem
within the
transaction.
But if so, how will the constraint be fullfilled? Will
transactionB be aborted?
Is there a difference running in transaction level
serializable or readcommited?

-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/

---------------------------(end of
broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to
majordomo@postgresql.org