Re: delete and select with IN clause issues
От | Jeff Frost |
---|---|
Тема | Re: delete and select with IN clause issues |
Дата | |
Msg-id | Pine.LNX.4.64.0611021608070.29554@discord.home.frostconsultingllc.com обсуждение исходный текст |
Ответ на | delete and select with IN clause issues (Jeff Frost <jeff@frostconsultingllc.com>) |
Список | pgsql-sql |
On Thu, 2 Nov 2006, Jeff Frost wrote: > I'm having problem with a cleanup script that runs nightly. The script calls > the following query: > > delete from visit where id not in (select distinct visit_id from page_view); > > This yields the following error: > > ERROR: update or delete on "visit" violates foreign key constraint > "fk34afd255fbacabec" on "page_view" > DETAIL: Key (id)=(38635629) is still referenced from table "page_view". > > Ok, that seems fine, but when I do a select instead of delete, I do not find > the referenced id in my list: > > select id from visit where id not in (select distinct visit_id from > page_view) and id = 38635629 ; > > id > ---- > (0 rows) > > Also, if I don't specify the id = bit at the end, I still don't find it in > the output when I search through with less, so why is it trying to delete > that row? > > Rewriting the query like so, yields the same problem: > > delete from visit where NOT EXISTS ( select * from page_view WHERE visit.id = > page_view.visit_id); > > ERROR: update or delete on "visit" violates foreign key constraint > "fk34afd255fbacabec" on "page_view" > DETAIL: Key (id)=(38638264) is still referenced from table "page_view". > > The plan looks like this: > > explain analyze delete from visit where id not in (select distinct visit_id > from page_view); > > QUERY PLAN > ----------------------------------------------------------------------------------------------------------------------------------------------------------------- > Seq Scan on visit (cost=165027.49..189106.89 rows=211976 width=6) (actual > time=4789.595..5330.367 rows=150677 loops=1) > Filter: (NOT (hashed subplan)) > SubPlan > -> Unique (cost=0.00..165017.77 rows=3889 width=8) (actual > time=2.717..4388.928 rows=273285 loops=1) > -> Index Scan using page_view_visit_idx on page_view > (cost=0.00..159625.41 rows=2156946 width=8) (actual time=2.713..2914.944 > rows=2249576 loops=1) > Trigger for constraint fk34afd255fbacabec: time=7174.540 calls=150677 > Total runtime: 32772.345 ms > (7 rows) > > \d page_view > Table "public.page_view" > Column | Type | Modifiers > ----------------+-----------------------------+--------------------- > id | bigint | not null > visit_id | bigint | not null > uri | character varying(255) | > params | text | > stamp | timestamp without time zone | > cindex | integer | not null default -1 > tindex | integer | not null default -1 > method | character varying(7) | not null > source_address | character varying(16) | > server_name | character varying(255) | > Indexes: > "page_view_pkey" PRIMARY KEY, btree (id) > "page_view_stamp_idx" btree (stamp) > "page_view_uri_idx" btree (uri) > "page_view_visit_idx" btree (visit_id) > Foreign-key constraints: > "fk34afd255fbacabec" FOREIGN KEY (visit_id) REFERENCES visit(id) > > What kind of silliness am I forgetting? > > Almost forgot: server_version ---------------- 8.1.4 (1 row) -- Jeff Frost, Owner <jeff@frostconsultingllc.com> Frost Consulting, LLC http://www.frostconsultingllc.com/ Phone: 650-780-7908 FAX: 650-649-1954
В списке pgsql-sql по дате отправления: