From: | Ayush Tiwari <ayushtiwari(dot)slg01(at)gmail(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Drop database command will raise "wrong tuple length" if pg_database tuple contains toast attribute. |
Date: | 2024-08-13 05:37:39 |
Message-ID: | CAJTYsWWNkCt+-UnMhg=BiCD3Mh8c2JdHLofPxsW3m2dkDFw8RA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi hackers,
We encountered an issue lately, that if the database grants too many roles
`datacl` is toasted, following which, the drop database command will fail
with error "wrong tuple length".
To reproduce the issue, please follow below steps:
CREATE DATABASE test;
-- create helper function
CREATE OR REPLACE FUNCTION data_tuple() returns text as $body$
declare
mycounter int;
begin
for mycounter in select i from generate_series(1,2000) i loop
execute 'CREATE
ROLE aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbb ' || mycounter;
execute 'GRANT ALL ON DATABASE test to
aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbb ' || mycounter;
end loop;
return 'ok';
end;
$body$ language plpgsql volatile strict;
-- create roles and grant on the database.
SELECT data_tuple();
-- drop database command, this will result in "wrong tuple length" error.
DROP DATABASE test;
The root cause of this behaviour is that the HeapTuple in dropdb
function fetches a copy of pg_database tuple from system cache.
But the system cache flattens any toast attributes, which cause the length
check to fail in heap_inplace_update.
A patch for this issue is attached to the mail, the solution is to
change the logic to fetch the tuple by directly scanning pg_database rather
than using the catcache.
Regards,
Ayush
Attachment | Content-Type | Size |
---|---|---|
0001-Fix-drop-database-with-pg_database-toast-attribute.patch | application/x-patch | 1.6 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Bertrand Drouvot | 2024-08-13 05:41:16 | Re: Restart pg_usleep when interrupted |
Previous Message | Zhijie Hou (Fujitsu) | 2024-08-13 04:39:15 | RE: Conflict detection and logging in logical replication |