> On Tue, Jul 04, 2006 at 11:59:27AM +0200, Zdenek Kotala wrote:
>> I don't know how it will exactly works in postgres but my expectations
>> Mark Woodward wrote:
>> >Is there a difference in PostgreSQL performance between these two
>> >different strategies:
>> >if(!exec("update foo set bar='blahblah' where name = 'xx'"))
>> > exec("insert into foo(name, bar) values('xx','blahblah'");
>> The update code generates new tuple in the datafile and pointer has been
>> changed in the indexfile to the new version of tuple. This action does
>> not generate B-Tree structure changes. If update falls than insert
>> command creates new tuple in the datafile and it adds new item into
>> B-Tree. It should be generate B-Tree node split.
> Actually, not true. Both versions will generate a row row and create a
> new index tuple. The only difference may be that in the update case the
> may be a ctid link from the old version to the new one, but that's
> about it...
> Which is faster will probably depends on what is more common in your DB:
> row already exists or not. If you know that 99% of the time the row
> will exist, the update will probably be faster because you'll only
> execute one query 99% of the time.
OK, but the point of the question is that constantly updating a single row
steadily degrades performance, would delete/insery also do the same?
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings