From: | Zeugswetter Andreas SB <ZeugswetterA(at)wien(dot)spardat(dot)at> |
---|---|
To: | "'Tom Lane'" <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | "'Hiroshi Inoue'" <Inoue(at)tpf(dot)co(dot)jp>, pgsql-hackers(at)postgresql(dot)org |
Subject: | AW: AW: AW: relation ### modified while in use |
Date: | 2000-10-23 14:30:36 |
Message-ID: | 11C1E6749A55D411A9670001FA6879633680C4@sdexcsrv1.f000.d0188.sd.spardat.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> Until existing xacts using that table have closed, yes. But I believe
> the lock manager has some precedence rules that will allow the pending
> request for AccessExclusiveLock to take precedence over new requests
> for lesser locks. So you're only held off for a long time if you have
> long-running xacts that use the target table.
>
> I consider that behavior *far* safer than allowing schema changes to
> be seen mid-transaction. Consider the following example:
>
> Session 1 Session 2
>
> begin;
>
> INSERT INTO foo ...;
>
> ALTER foo ADD constraint;
>
> INSERT INTO foo ...;
>
> end;
>
> Which, if any, of session 1's insertions will be subject to the
> constraint? What are the odds that the dba will like the result?
>
> With my proposal, session 2's ALTER would wait for session 1
> to commit,
> and then the ALTER's own scan to verify the constraint will check all
> the rows added by session 1.
>
> Under your proposal, I think the rows inserted at the beginning of
> session 1's xact would be committed without having been checked.
No, the above is not a valid example, because Session 2 won't
get the exclusive lock until Session 1 commits, since Session 1 already
holds a lock on foo (for the inserted row).
You were talking about the "select only" case (and no for update eighter).
I think that select statements need a shared lock for the duration of their
execution only.
Andreas
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2000-10-23 14:32:04 | Re: pgsql/src/test/regress/expected (plpgsql.out inet.out foreign_key.out errors.out) |
Previous Message | Bruce Momjian | 2000-10-23 14:26:50 | Re: pgsql/src/test/regress/expected (plpgsql.out inet.out foreign_key.out errors.out) |