Thread: Issue with pgstattuple on Sequences in PostgreSQL
Hi PostgreSQL Community,
I was recently exploring the pgstattuple code directory and found this piece of code: https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L255-L259.
It indicates that pgstattuple supports relations, toast tables, materialized views, and sequences.
However, when I executed a query with a sequence, I encountered the following error:
postgres=> CREATE SEQUENCE serial START 101;
CREATE SEQUENCE
postgres=> SELECT * FROM pgstattuple('serial');
ERROR: only heap AM is supported
postgres=>
It got stuck in this if condition - https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L326-L329
How can one use pgstattuple on sequences?
Regards,
Ayush Vatsa
Hi PostgreSQL Community,
I was recently exploring the pgstattuple code directory and found this piece of code: https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L255-L259.
It indicates that pgstattuple supports relations, toast tables, materialized views, and sequences.
However, when I executed a query with a sequence, I encountered the following error:postgres=> CREATE SEQUENCE serial START 101;
CREATE SEQUENCE
postgres=> SELECT * FROM pgstattuple('serial');
ERROR: only heap AM is supported
postgres=>It got stuck in this if condition - https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L326-L329
How can one use pgstattuple on sequences?Regards,
Ayush Vatsa
How can one use pgstattuple on sequences?
I was recently exploring the pgstattuple code directory and found this piece of code: https://github.com/postgres/
postgres/blob/master/contrib/ pgstattuple/pgstattuple.c# L255-L259. It indicates that pgstattuple supports relations, toast tables, materialized views, and sequences.
However, when I executed a query with a sequence, I encountered the following error:postgres=> CREATE SEQUENCE serial START 101;
CREATE SEQUENCE
postgres=> SELECT * FROM pgstattuple('serial');
ERROR: only heap AM is supported
postgres=>It got stuck in this if condition - https://github.com/postgres/
postgres/blob/master/contrib/ pgstattuple/pgstattuple.c# L326-L329
How can one use pgstattuple on sequences?
On 6/24/24 04:09, Ayush Vatsa wrote: > Hi PostgreSQL Community, > > I was recently exploring the pgstattuple code directory and found this > piece of code: > https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L255-L259 <https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L255-L259>. > > It indicates that pgstattuple supports relations, toast tables, > materialized views, and sequences. > However, when I executed a query with a sequence, I encountered the > following error: > > postgres=> CREATE SEQUENCE serial START 101; > CREATE SEQUENCE > postgres=> SELECT * FROM pgstattuple('serial'); > ERROR: only heap AM is supported > postgres=> File a bug report here: https://www.postgresql.org/account/login/?next=/account/submitbug/ > > It got stuck in this if condition - > https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L326-L329 <https://github.com/postgres/postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L326-L329> > How can one use pgstattuple on sequences? > > Regards, > Ayush Vatsa > -- Adrian Klaver adrian.klaver@aklaver.com
> On Monday, June 24, 2024, Ayush Vatsa <ayushvatsa1810@gmail.com> wrote: >> >> I was recently exploring the pgstattuple code directory and found this >> piece of code: https://github.com/postgres/postgres/blob/master/contrib/ >> pgstattuple/pgstattuple.c#L255-L259. >> >> It indicates that pgstattuple supports relations, toast tables, >> materialized views, and sequences. >> However, when I executed a query with a sequence, I encountered the >> following error: >> >> postgres=> CREATE SEQUENCE serial START 101; >> CREATE SEQUENCE >> postgres=> SELECT * FROM pgstattuple('serial'); >> ERROR: only heap AM is supported >> postgres=> >> >> It got stuck in this if condition - https://github.com/postgres/ >> postgres/blob/master/contrib/pgstattuple/pgstattuple.c#L326-L329 >> >> >> How can one use pgstattuple on sequences? >> > > As-is? Doesn’t look like you can. It used to work until v11. test=# SELECT * FROM pgstattuple('serial'); -[ RECORD 1 ]------+------ table_len | 8192 tuple_count | 1 tuple_len | 41 tuple_percent | 0.5 dead_tuple_count | 0 dead_tuple_len | 0 dead_tuple_percent | 0 free_space | 8104 free_percent | 98.93 It stopped working by this commit: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=4b82664156c230b59607704506f5b0a32ef490a2 because pgstat_heap() rejects other than heap AM. I think the v12 release note should have explicitly mentioned that sequences are not supported by pgstattuple any more. > I agree it’s a documentation bug that > this is the case with a brief explanation of why - sequences do not produce > dead tuples and do not behave like real tables aside from being able to be > selected from (i.e., no SQL update/delete command). > > The code should produce an explicit error for that relkind as well. If so, then the regression test should be fixed as well. Currently there's no test case for sequences. Best reagards, -- Tatsuo Ishii SRA OSS LLC English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp
Thanks for confirmation, then maybe I can start a new thread in pgsql-hackers about this bug and I can myself create a patch for the same.
I will add regress test for sequences as well.