BUG #18567: ERROR: cache lookup failed for attribute 1 of relation 74580

Started by PG Bug reporting formover 1 year ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #18567: ERROR: cache lookup failed for attribute 1 of relation 74580

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