> On Fri, Jan 7, 2011 at 6:28 PM, Florian Pflug <f...@phlo.org> wrote:
>> I forgot about sequences earlier. If we dump while someone deletes all
>> rows and resets the sequence the dump might contain rows and still
>> reset the sequence. This could cause duplicate key errors on restore.
>> I haven't checked if this is really possible though - I guess it would
>> depend on the exact order of these events...
> 
> To fix this, you'd need a lock that allowed getting values from the
> sequence but prevented resetting it, and...
> 
>> I wonder how such locks would work. Would such locks prevent accessing
>> these objects? Or just modifications? For example, if I locked a function,
>> could someone else execute it while I held the lock?
> 
> ...in fact we do very little locking of objects other than tables.
> DROP takes an AccessExclusiveLock on whatever it's dropping, and
> COMMENT and SECURITY LABEL take ShareUpdateExclusiveLocks to avoid
> orphaning pg_{sh,}description or pg_seclabel entries in the face of a
> concurrent drop, but most operations on non-table objects don't AFAIK
> take any lock at all.  We probably don't want to make too many changes
> in this area, because there are already workloads where the
> heavyweight lock manager can become a bottleneck, and one can easily
> imagine that locking operators or namespaces could make that problem
> much worse.

For query based replication tools like pgpool-II (I don't know any
other tools, for example Postgres XC falls in this category or
not...), we need to be able to lock sequences. Fortunately it is allowed to:

SELECT 1 FROM foo_sequece FOR UPDATE;

but LOCK foo_sequence looks more appropreate syntax for me.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to