1.源码编译
pageinspect的源码在postgre源码包的contrib目录下,解压postgre源码包后进入对应的目录。
[root@localhost pageinspect]# pwd /root/postgresql-11beta2/contrib/pageinspect [root@localhost pageinspect]# ll total 144 -rwxr-xr-x 1 1107 1107 10455 Jun 25 23:09 brinfuncs.c -rwxr-xr-x 1 1107 1107 15388 Jun 25 23:09 btreefuncs.c drwxr-xr-x 2 1107 1107 4096 Jun 25 23:17 expected -rwxr-xr-x 1 1107 1107 1572 Jun 25 23:09 fsmfuncs.c -rwxr-xr-x 1 1107 1107 7590 Jun 25 23:09 ginfuncs.c -rwxr-xr-x 1 1107 1107 15812 Jun 25 23:09 hashfuncs.c -rwxr-xr-x 1 1107 1107 12367 Jun 25 23:09 heapfuncs.c -rwxr-xr-x 1 1107 1107 802 Jun 25 23:09 Makefile -rwxr-xr-x 1 1107 1107 560 Jun 25 23:09 pageinspect--1.0--1.1.sql -rwxr-xr-x 1 1107 1107 562 Jun 25 23:09 pageinspect--1.1--1.2.sql -rwxr-xr-x 1 1107 1107 1946 Jun 25 23:09 pageinspect--1.2--1.3.sql -rwxr-xr-x 1 1107 1107 2566 Jun 25 23:09 pageinspect--1.3--1.4.sql -rwxr-xr-x 1 1107 1107 1347 Jun 25 23:09 pageinspect--1.4--1.5.sql -rwxr-xr-x 1 1107 1107 2252 Jun 25 23:09 pageinspect--1.5--1.6.sql -rwxr-xr-x 1 1107 1107 6262 Jun 25 23:09 pageinspect--1.5.sql -rwxr-xr-x 1 1107 1107 698 Jun 25 23:09 pageinspect--1.6--1.7.sql -rwxr-xr-x 1 1107 1107 173 Jun 25 23:09 pageinspect.control -rwxr-xr-x 1 1107 1107 527 Jun 25 23:09 pageinspect.h -rwxr-xr-x 1 1107 1107 1116 Jun 25 23:09 pageinspect--unpackaged--1.0.sql -rwxr-xr-x 1 1107 1107 8516 Jun 25 23:09 rawpage.c drwxr-xr-x 2 1107 1107 4096 Jun 25 23:17 sql
有makefile文件,直接用make命令进行编译即可。编译后,只要得到pageinspect.so这个文件。
[root@localhost pageinspect]# ll total 1224 -rwxr-xr-x 1 1107 1107 10455 Jun 25 23:09 brinfuncs.c -rw-r--r-- 1 root root 138240 Jul 27 16:43 brinfuncs.o -rwxr-xr-x 1 1107 1107 15388 Jun 25 23:09 btreefuncs.c -rw-r--r-- 1 root root 160912 Jul 27 16:43 btreefuncs.o drwxr-xr-x 2 1107 1107 4096 Jun 25 23:17 expected -rwxr-xr-x 1 1107 1107 1572 Jun 25 23:09 fsmfuncs.c -rw-r--r-- 1 root root 34080 Jul 27 16:43 fsmfuncs.o -rwxr-xr-x 1 1107 1107 7590 Jun 25 23:09 ginfuncs.c -rw-r--r-- 1 root root 120392 Jul 27 16:43 ginfuncs.o -rwxr-xr-x 1 1107 1107 15812 Jun 25 23:09 hashfuncs.c -rw-r--r-- 1 root root 151832 Jul 27 16:43 hashfuncs.o -rwxr-xr-x 1 1107 1107 12367 Jun 25 23:09 heapfuncs.c -rw-r--r-- 1 root root 112936 Jul 27 16:43 heapfuncs.o -rwxr-xr-x 1 1107 1107 802 Jun 25 23:09 Makefile -rwxr-xr-x 1 1107 1107 560 Jun 25 23:09 pageinspect--1.0--1.1.sql -rwxr-xr-x 1 1107 1107 562 Jun 25 23:09 pageinspect--1.1--1.2.sql -rwxr-xr-x 1 1107 1107 1946 Jun 25 23:09 pageinspect--1.2--1.3.sql -rwxr-xr-x 1 1107 1107 2566 Jun 25 23:09 pageinspect--1.3--1.4.sql -rwxr-xr-x 1 1107 1107 1347 Jun 25 23:09 pageinspect--1.4--1.5.sql -rwxr-xr-x 1 1107 1107 2252 Jun 25 23:09 pageinspect--1.5--1.6.sql -rwxr-xr-x 1 1107 1107 6262 Jun 25 23:09 pageinspect--1.5.sql -rwxr-xr-x 1 1107 1107 698 Jun 25 23:09 pageinspect--1.6--1.7.sql -rwxr-xr-x 1 1107 1107 173 Jun 25 23:09 pageinspect.control -rwxr-xr-x 1 1107 1107 527 Jun 25 23:09 pageinspect.h -rwxr-xr-x 1 root root 292497 Jul 27 16:43 pageinspect.so -rwxr-xr-x 1 1107 1107 1116 Jun 25 23:09 pageinspect--unpackaged--1.0.sql -rwxr-xr-x 1 1107 1107 8516 Jun 25 23:09 rawpage.c -rw-r--r-- 1 root root 76816 Jul 27 16:43 rawpage.o drwxr-xr-x 2 1107 1107 4096 Jun 25 23:17 sql
然后使用make install命令,把相关文件安装到/usr/localpgsql的目录下。
[root@localhost pageinspect]# make install /bin/mkdir -p '/usr/local/pgsql/lib' /bin/mkdir -p '/usr/local/pgsql/share/extension' /bin/mkdir -p '/usr/local/pgsql/share/extension' /usr/bin/install -c -m 755 pageinspect.so '/usr/local/pgsql/lib/pageinspect.so' /usr/bin/install -c -m 644 ./pageinspect.control '/usr/local/pgsql/share/extension/' /usr/bin/install -c -m 644 ./pageinspect--1.6--1.7.sql ./pageinspect--1.5.sql ./pageinspect--1.5--1.6.sql ./pageinspect--1.4--1.5.sql ./pageinspect--1.3--1.4.sql ./pageinspect--1.2--1.3.sql ./pageinspect--1.1--1.2.sql ./pageinspect--1.0--1.1.sql ./pageinspect--unpackaged--1.0.sql '/usr/local/pgsql/share/extension/'
2.创建pageinspect extension
准备工作完成,然后切换到postgre的用户,进入psql,创建pageinspect extension。
[pguser@localhost log]$ su pguser Password: [pguser@localhost log]$ psql -d test psql (11beta2) Type "help" for help. test=# \d pg_extension; Table "pg_catalog.pg_extension" Column | Type | Collation | Nullable | Default ----------------+---------+-----------+----------+--------- extname | name | | not null | extowner | oid | | not null | extnamespace | oid | | not null | extrelocatable | boolean | | not null | extversion | text | | not null | extconfig | oid[] | | | extcondition | text[] | | | Indexes: "pg_extension_name_index" UNIQUE, btree (extname) "pg_extension_oid_index" UNIQUE, btree (oid) test=# create extension pageinspect; CREATE EXTENSION test=# \d pg_extension; Table "pg_catalog.pg_extension" Column | Type | Collation | Nullable | Default ----------------+---------+-----------+----------+--------- extname | name | | not null | extowner | oid | | not null | extnamespace | oid | | not null | extrelocatable | boolean | | not null | extversion | text | | not null | extconfig | oid[] | | | extcondition | text[] | | | Indexes: "pg_extension_name_index" UNIQUE, btree (extname) "pg_extension_oid_index" UNIQUE, btree (oid) test=# select extName from pg_extension; extname ------------- plpgsql pageinspect (2 rows)
这样就安装成功了。
3.使用pageinspect的函数
最后还通过pageinspect的函数,查看table t2的页头信息。
test=# SELECT * FROM page_header(get_raw_page('t2', 0)); lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid -----------+----------+-------+-------+-------+---------+----------+---------+----------- 0/1C3B848 | 0 | 0 | 32 | 8128 | 8192 | 8192 | 4 | 679 (1 row)