Thread: BUG #18567: ERROR: cache lookup failed for attribute 1 of relation 74580
BUG #18567: ERROR: cache lookup failed for attribute 1 of relation 74580
From
PG Bug reporting form
Date:
The following bug has been logged on the website: Bug reference: 18567 Logged by: Dian Jiang Email address: jiangdian_m@163.com PostgreSQL version: 15.0 Operating system: centos Description: SQL: Process A: psql: CREATE TABLE test_table ( id SERIAL PRIMARY KEY, data TEXT ) WITH (fillfactor = 70); CREATE INDEX test_index ON test_table (data) WITH (fillfactor = 80); INSERT INTO test_table (data) VALUES ('sample data'); Attach gdb to process A. In the pg_get_indexdef_worker() function, set a breakpoint at the line context = deparse_context_for(get_relation_name(indrelid), indrelid); and then execute the query in Process A: SELECT pg_get_indexdef(indexrelid) FROM pg_index WHERE indrelid = 'test_table'::regclass; Process B: drop index test_table; ---------------------------------------------------------------- The query in process A will result in an error: postgres:# SELECT pg_get_indexdef(indexrelid) FROM pg_index WHERE indrelid = 'test_table'::regclass; ERROR: cache lookup failed for attribute l of relation 74580 The reason is that context = deparse_context_for(get_relation_name(indrelid), indrelid); handles invalidation messages, leading to cache invalidation
PG Bug reporting form <noreply@postgresql.org> writes: > [ pg_get_indexdef can fail on a concurrently-dropped index ] I'm not terribly concerned about this. In any case, the only fix I can think of is for pg_get_indexdef to take a lock on the index, which seems like a cure considerably worse than the disease. regards, tom lane