btree index - incorrect results

Поиск
Список
Период
Сортировка
От Mr. Dan
Тема btree index - incorrect results
Дата
Msg-id BAY116-F3606EDEA3BEB51825DA2E8D1650@phx.gbl
обсуждение исходный текст
Список pgsql-admin

Hi,
Using this query plan, an extra uid shows up in this example.  We are in the
process of upgrading from v810 to v814.  Does anyone see anything wrong with
this query plan that might be causing a problem?

Index Scan using pk_recent_projects on recent_projects  (cost=0.00..5.81
rows=1 width=6)
  Index Cond: ((user_id = 139) AND (project_id = 3))

...  we have a 'hot' table (one with many many transactions)
that gets inserted and deleted often. About once a month
now when we do a select from that table the results of the select do not
match the where clause, ex.

select * from recent_projects
where user_id = 139

sometimes produces these results:
user_id    project_id
139        3
139        1
139        17
754        11


Tom writes..
>Hmmm .... that looks sorta familiar.  What is the query plan that's used
>for this SELECT?
>
>            regards, tom lane



---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend



Hey Tom,


Here is the query:

DELETE FROM recent_projects WHERE project_id = 3 AND user_id = 139;


And here is the query plan:

Index Scan using pk_recent_projects on recent_projects  (cost=0.00..5.81
rows=1 width=6)
  Index Cond: ((user_id = 139) AND (project_id = 3))


The table definition is :

CREATE TABLE recent_projects
(
  user_id int4 NOT NULL,
  project_id int4 NOT NULL,
  last_viewed timestamp,
  CONSTRAINT pk_recent_projects PRIMARY KEY (user_id, project_id),
  CONSTRAINT fk_recent_project_id FOREIGN KEY (project_id)
      REFERENCES project (project_id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE CASCADE,
  CONSTRAINT fk_recent_user_id FOREIGN KEY (user_id)
      REFERENCES users (user_id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITHOUT OIDS;


This is a table with a lot of transactions.

The behavior we noticed is that we do the delete as specified above and then
do a reinsert with a new timestamp and everything else the same (lazy I
know, but not my code). What happens some of the time is that the reinsert
fails and give a duplicate key failure. What has fixed this in the past is
reindexing the table - but we don't want to rely on that forever.



В списке pgsql-admin по дате отправления:

Предыдущее
От: "Mans"
Дата:
Сообщение: Re: Circular Dependency in Tables and Deletion of Data
Следующее
От: Stephan Szabo
Дата:
Сообщение: Re: Circular Dependency in Tables and Deletion of Data