无法运行pg_buffercache_pages()函数

问题描述 投票:0回答:1

我正在尝试探索

pg_buffercache
扩展并在使用
pg_buffercache_pages()
函数时面临错误。 错误如下:

test=# SELECT pg_buffercache_pages();
ERROR:  return type must be a row type

test=# SELECT * FROM pg_buffercache_pages();
ERROR:  a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM pg_buffercache_pages();

                      ^

-- taken from .sql file of regress test
test=# SELECT * FROM pg_buffercache_pages() AS p (wrong int);
ERROR:  incorrect number of output arguments

我已确认我以超级用户身份登录,同时我已浏览文档但找不到如何运行此功能。

postgresql rdbms
1个回答
0
投票

此功能不适合直接使用,而是通过

pg_buffercache
视图使用。如果您查看该视图的定义,您将看到它是如何被调用的:

\d+ pg_buffercache 
                             View "public.pg_buffercache"
      Column      │   Type   │ Collation │ Nullable │ Default │ Storage │ Description 
══════════════════╪══════════╪═══════════╪══════════╪═════════╪═════════╪═════════════
 bufferid         │ integer  │           │          │         │ plain   │ 
 relfilenode      │ oid      │           │          │         │ plain   │ 
 reltablespace    │ oid      │           │          │         │ plain   │ 
 reldatabase      │ oid      │           │          │         │ plain   │ 
 relforknumber    │ smallint │           │          │         │ plain   │ 
 relblocknumber   │ bigint   │           │          │         │ plain   │ 
 isdirty          │ boolean  │           │          │         │ plain   │ 
 usagecount       │ smallint │           │          │         │ plain   │ 
 pinning_backends │ integer  │           │          │         │ plain   │ 
View definition:
 SELECT bufferid,
    relfilenode,
    reltablespace,
    reldatabase,
    relforknumber,
    relblocknumber,
    isdirty,
    usagecount,
    pinning_backends
   FROM pg_buffercache_pages() p(bufferid integer, relfilenode oid, reltablespace oid, reldatabase oid, relforknumber smallint, relblocknumber bigint, isdirty boolean, usagecount smallint, pinning_backends integer);

该错误的原因是该函数被定义为返回

SETOF record
,因此您在调用该函数时必须指定该函数返回的列。

© www.soinside.com 2019 - 2024. All rights reserved.