Postgres源码测试

2018-10-09  本文已影响83人  hemny

一、 简介

本文主要介绍postgres的测试相关功能,利用自带的测试工程和测试用例实现

二、 regress(回归测试)

首先,编译源码:

[appusr@postgre postgresql-10.5]$ export PGHOME=/home/appusr/PostgreSQL/pgsql-10
[appusr@postgre postgresql-10.5]$ ./configure --enable-rpath --prefix=$PGHOME --includedir=$PGHOME/include --mandir=$PGHOME/share/man --datadir=$PGHOME/share --with-icu --with-perl --with-python --with-tcl --with-tclconfig=/usr/lib64 --with-openssl --with-pam --with-gssapi --with-includes=/usr/include --with-libraries=/usr/lib64 --enable-nls --enable-dtrace --with-uuid=e2fs --with-libxml --with-libxslt --with-ldap --with-selinux --with-systemd --docdir=$PGHOME/doc --htmldir=$PGHOME/doc/html   --enable-debug

[appusr@postgre postgresql-10.5]$ make -j4 all

执行 regress测试工程代码

[appusr@postgre postgresql-10.5]$ make -C src/test/regress check
make: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[2]: Nothing to be done for `submake-errcodes'.
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[2]: Nothing to be done for `submake-errcodes'.
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../../../src/backend generated-headers
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make -C catalog schemapg.h
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend/catalog'
make[2]: `schemapg.h' is up to date.
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend/catalog'
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make -C ../../../contrib/spi
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/contrib/spi'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/contrib/spi'
rm -rf ./testtablespace
mkdir ./testtablespace
rm -rf '/home/appusr/pg/postgresql-10.5'/tmp_install
/usr/bin/mkdir -p '/home/appusr/pg/postgresql-10.5'/tmp_install/log
make -C '../../..' DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log 2>&1
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dlpath=.  --schedule=./parallel_schedule  
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 80659
============== creating database "regression"         ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test tablespace               ... ok
parallel group (20 tests):  text float4 name char int2 boolean varchar oid pg_lsn txid int4 uuid regproc int8 money bit float8 enum numeric rangetypes
     boolean                  ... ok
     char                     ... ok
     name                     ... ok
     varchar                  ... ok
     text                     ... ok
     int2                     ... ok
     int4                     ... ok
     int8                     ... ok
     oid                      ... ok
     float4                   ... ok
     float8                   ... ok
     bit                      ... ok
     numeric                  ... ok
     txid                     ... ok
     uuid                     ... ok
     enum                     ... ok
     money                    ... ok
     rangetypes               ... ok
     pg_lsn                   ... ok
     regproc                  ... ok
test strings                  ... ok
test numerology               ... ok
parallel group (20 tests):  time lseg macaddr abstime polygon circle reltime line macaddr8 path timetz interval tinterval tstypes point inet date box timestamp timestamptz
     point                    ... ok
     lseg                     ... ok
     line                     ... ok
     box                      ... ok
     path                     ... ok
     polygon                  ... ok
     circle                   ... ok
     date                     ... ok
     time                     ... ok
     timetz                   ... ok
     timestamp                ... ok
     timestamptz              ... ok
     interval                 ... ok
     abstime                  ... ok
     reltime                  ... ok
     tinterval                ... ok
     inet                     ... ok
     macaddr                  ... ok
     macaddr8                 ... ok
     tstypes                  ... ok
parallel group (9 tests):  expressions comments geometry horology type_sanity misc_sanity oidjoins opr_sanity regex
     geometry                 ... ok
     horology                 ... ok
     regex                    ... ok
     oidjoins                 ... ok
     type_sanity              ... ok
     opr_sanity               ... ok
     misc_sanity              ... ok
     comments                 ... ok
     expressions              ... ok
test insert                   ... ok
test insert_conflict          ... ok
test create_function_1        ... ok
test create_type              ... ok
test create_table             ... ok
test create_function_2        ... ok
parallel group (3 tests):  copyselect copydml copy
     copy                     ... ok
     copyselect               ... ok
     copydml                  ... ok
parallel group (2 tests):  create_operator create_misc
     create_misc              ... ok
     create_operator          ... ok
parallel group (2 tests):  create_view create_index
     create_index             ... ok
     create_view              ... ok
parallel group (14 tests):  create_cast create_aggregate create_function_3 roleattributes drop_if_exists create_am typed_table vacuum constraints create_table_like rolenames triggers inherit updatable_views
     create_aggregate         ... ok
     create_function_3        ... ok
     create_cast              ... ok
     constraints              ... ok
     triggers                 ... ok
     inherit                  ... ok
     create_table_like        ... ok
     typed_table              ... ok
     vacuum                   ... ok
     drop_if_exists           ... ok
     updatable_views          ... ok
     rolenames                ... ok
     roleattributes           ... ok
     create_am                ... ok
test sanity_check             ... ok
test errors                   ... ok
test select                   ... ok
parallel group (20 tests):  select_distinct_on select_distinct select_having case delete random select_implicit namespace update select_into btree_index prepared_xacts transactions portals hash_index subselect union arrays aggregates join
     select_into              ... ok
     select_distinct          ... ok
     select_distinct_on       ... ok
     select_implicit          ... ok
     select_having            ... ok
     subselect                ... ok
     union                    ... ok
     case                     ... ok
     join                     ... ok
     aggregates               ... ok
     transactions             ... ok
     random                   ... ok
     portals                  ... ok
     arrays                   ... ok
     btree_index              ... ok
     hash_index               ... ok
     update                   ... ok
     namespace                ... ok
     prepared_xacts           ... ok
     delete                   ... ok
parallel group (17 tests):  init_privs drop_operator lock security_label password tablesample replica_identity object_address collate groupingsets spgist gin brin matview rowsecurity privileges gist
     brin                     ... ok
     gin                      ... ok
     gist                     ... ok
     spgist                   ... ok
     privileges               ... ok
     init_privs               ... ok
     security_label           ... ok
     collate                  ... ok
     matview                  ... ok
     lock                     ... ok
     replica_identity         ... ok
     rowsecurity              ... ok
     object_address           ... ok
     tablesample              ... ok
     groupingsets             ... ok
     drop_operator            ... ok
     password                 ... ok
parallel group (11 tests):  dbsize alter_operator tidscan async misc_functions psql tsrf sysviews misc alter_generic stats_ext
     alter_generic            ... ok
     alter_operator           ... ok
     misc                     ... ok
     psql                     ... ok
     async                    ... ok
     dbsize                   ... ok
     misc_functions           ... ok
     sysviews                 ... ok
     tsrf                     ... ok
     tidscan                  ... ok
     stats_ext                ... ok
parallel group (3 tests):  amutils psql_crosstab rules
     rules                    ... ok
     psql_crosstab            ... ok
     amutils                  ... ok
test select_parallel          ... ok
parallel group (2 tests):  subscription publication
     publication              ... ok
     subscription             ... ok
parallel group (20 tests):  portals_p2 json_encoding combocid advisory_lock guc xmlmap tsdicts functional_deps equivclass json dependency select_views window tsearch jsonb bitmapops cluster indirect_toast foreign_key foreign_data
     select_views             ... ok
     portals_p2               ... ok
     foreign_key              ... ok
     cluster                  ... ok
     dependency               ... ok
     guc                      ... ok
     bitmapops                ... ok
     combocid                 ... ok
     tsearch                  ... ok
     tsdicts                  ... ok
     foreign_data             ... ok
     window                   ... ok
     xmlmap                   ... ok
     functional_deps          ... ok
     advisory_lock            ... ok
     json                     ... ok
     jsonb                    ... ok
     json_encoding            ... ok
     indirect_toast           ... ok
     equivclass               ... ok
parallel group (19 tests):  conversion limit prepare plancache returning temp without_oid copy2 sequence polymorphism truncate with largeobject domain rangefuncs rowtypes xml alter_table plpgsql
     plancache                ... ok
     limit                    ... ok
     plpgsql                  ... ok
     copy2                    ... ok
     temp                     ... ok
     domain                   ... ok
     rangefuncs               ... ok
     prepare                  ... ok
     without_oid              ... ok
     conversion               ... ok
     truncate                 ... ok
     alter_table              ... ok
     sequence                 ... ok
     polymorphism             ... ok
     rowtypes                 ... ok
     returning                ... ok
     largeobject              ... ok
     with                     ... ok
     xml                      ... ok
test identity                 ... ok
test event_trigger            ... ok
test stats                    ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=======================
 All 178 tests passed.   /*这里是测试结果报告汇总,一共178个测试用例,全部通过*/
=======================

make: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'

解析:
sql:里面存放测试用例的SQL文件
expected:里面存放测试用例期望输出的结果

pg_regress采用psql命令执行sql文件,将本次执行结果输出到result文件夹中
然后对比result和expected的文件,结果与期望一致,则测试通过,否则测试失败。

三、 isolation (隔离测试)

首先,编译源码:
与 regress(回归测试)的测试一样

执行 isolation 测试工程代码

[appusr@postgre postgresql-10.5]$ make -C src/test/isolation check
make: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
make -C ../../../src/interfaces/libpq all
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
make -C ../../../src/port all
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[2]: Nothing to be done for `submake-errcodes'.
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[2]: Nothing to be done for `submake-errcodes'.
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
rm -rf '/home/appusr/pg/postgresql-10.5'/tmp_install
/usr/bin/mkdir -p '/home/appusr/pg/postgresql-10.5'/tmp_install/log
make -C '../../..' DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log 2>&1
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../src/test/isolation/pg_isolation_regress --temp-instance=./tmp_check_iso --inputdir=. --outputdir=output_iso --bindir=     --schedule=./isolation_schedule
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 83142
============== creating database "isolation_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test read-only-anomaly        ... ok
test read-only-anomaly-2      ... ok
test read-only-anomaly-3      ... ok
test read-write-unique        ... ok
test read-write-unique-2      ... ok
test read-write-unique-3      ... ok
test read-write-unique-4      ... ok
test simple-write-skew        ... ok
test receipt-report           ... ok
test temporal-range-integrity ... ok
test project-manager          ... ok
test classroom-scheduling     ... ok
test total-cash               ... ok
test referential-integrity    ... ok
test ri-trigger               ... ok
test partial-index            ... ok
test two-ids                  ... ok
test multiple-row-versions    ... ok
test index-only-scan          ... ok
test deadlock-simple          ... ok
test deadlock-hard            ... ok
test deadlock-soft            ... ok
test deadlock-soft-2          ... ok
test fk-contention            ... ok
test fk-deadlock              ... ok
test fk-deadlock2             ... ok
test eval-plan-qual           ... ok
test lock-update-delete       ... ok
test lock-update-traversal    ... ok
test insert-conflict-do-nothing ... ok
test insert-conflict-do-nothing-2 ... ok
test insert-conflict-do-update ... ok
test insert-conflict-do-update-2 ... ok
test insert-conflict-do-update-3 ... ok
test insert-conflict-toast    ... ok
test delete-abort-savept      ... ok
test delete-abort-savept-2    ... ok
test aborted-keyrevoke        ... ok
test multixact-no-deadlock    ... ok
test multixact-no-forget      ... ok
test lock-committed-update    ... ok
test lock-committed-keyupdate ... ok
test update-locked-tuple      ... ok
test propagate-lock-delete    ... ok
test tuplelock-conflict       ... ok
test tuplelock-update         ... ok
test freeze-the-dead          ... ok
test nowait                   ... ok
test nowait-2                 ... ok
test nowait-3                 ... ok
test nowait-4                 ... ok
test nowait-5                 ... ok
test skip-locked              ... ok
test skip-locked-2            ... ok
test skip-locked-3            ... ok
test skip-locked-4            ... ok
test drop-index-concurrently-1 ... ok
test multiple-cic             ... ok
test alter-table-1            ... ok
test alter-table-2            ... ok
test alter-table-3            ... ok
test alter-table-4            ... ok
test create-trigger           ... ok
test sequence-ddl             ... ok
test async-notify             ... ok
test vacuum-reltuples         ... ok
test timeouts                 ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

======================
 All 67 tests passed.   /*这里是测试结果报告汇总,一共67个测试用例,全部通过*/
======================

make: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'

解析:
sql:里面存放测试用例的SQL文件
expected:里面存放测试用例期望输出的结果

pg_regress采用psql命令执行sql文件,将本次执行结果输出到result文件夹中
然后对比result和expected的文件,结果与期望一致,则测试通过,否则测试失败。

四、 modules(模块测试)

首先,编译源码:
与 regress(回归测试)的测试一样

测试的模块有:

brin ——
commit_ts —— 事务提交
dummy_seclabel ——
snapshot_too_old —— 快照太旧
test_ddl_deparse ——
test_extensions —— extension扩展模块
test_parser —— parser语法分析模块
test_pg_dump —— pg_dump
test_rls_hooks ——
test_shm_mq ——
worker_spi SPI模块 ——

执行 modules 测试工程代码

[appusr@postgre postgresql-10.5]$ make -C src/test/modules check
make: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules'
rm -rf '/home/appusr/pg/postgresql-10.5'/tmp_install
/usr/bin/mkdir -p '/home/appusr/pg/postgresql-10.5'/tmp_install/log
make -C '../../..' DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log 2>&1
make -C brin check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/brin'
for extra in contrib/pageinspect; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
make -C ../../../../src/test/isolation all
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
make -C ../../../src/interfaces/libpq all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
/usr/bin/mkdir -p isolation_output
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/isolation/pg_isolation_regress --temp-instance=./tmp_check_iso --inputdir=. --outputdir=output_iso --bindir=     \
    --outputdir=./isolation_output \
    summarization-and-inprogress-insertion
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 84960
============== creating database "isolation_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test summarization-and-inprogress-insertion ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

TAP tests not enabled
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/brin'
make -C commit_ts check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/commit_ts'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/commit_ts; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
TAP tests not enabled
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --temp-config=../../../../src/test/modules/commit_ts/commit_ts.conf --dbname=contrib_regression commit_timestamp
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85011
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test commit_timestamp         ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/commit_ts'
make -C dummy_seclabel check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/dummy_seclabel'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/dummy_seclabel; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression dummy_seclabel
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85069
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test dummy_seclabel           ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/dummy_seclabel'
make -C snapshot_too_old check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
for extra in src/test/modules/snapshot_too_old; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
make -C ../../../../src/test/modules/snapshot_too_old
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
make -C ../../../../src/test/isolation all
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
make -C ../../../src/interfaces/libpq all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/interfaces/libpq'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/isolation'
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/isolation/pg_isolation_regress --temp-instance=./tmp_check_iso --inputdir=. --outputdir=output_iso --bindir=     \
    --temp-config ../../../../src/test/modules/snapshot_too_old/sto.conf \
    sto_using_cursor sto_using_select sto_using_hash_index
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85117
============== creating database "isolation_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test sto_using_cursor         ... ok
test sto_using_select         ... ok
test sto_using_hash_index     ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 3 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/snapshot_too_old'
make -C test_ddl_deparse check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_ddl_deparse'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in contrib/pg_stat_statements src/test/modules/test_ddl_deparse; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_ddl_deparse create_extension create_schema create_type create_conversion create_domain create_sequence_1 create_table create_transform alter_table create_view create_trigger create_rule comment_on alter_function alter_sequence alter_ts_config alter_type_enum opfamily defprivs matviews
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85305
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test_ddl_deparse         ... ok
test create_extension         ... ok
test create_schema            ... ok
test create_type              ... ok
test create_conversion        ... ok
test create_domain            ... ok
test create_sequence_1        ... ok
test create_table             ... ok
test create_transform         ... ok
test alter_table              ... ok
test create_view              ... ok
test create_trigger           ... ok
test create_rule              ... ok
test comment_on               ... ok
test alter_function           ... ok
test alter_sequence           ... ok
test alter_ts_config          ... ok
test alter_type_enum          ... ok
test opfamily                 ... ok
test defprivs                 ... ok
test matviews                 ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

======================
 All 21 tests passed. 
======================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_ddl_deparse'
make -C test_extensions check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_extensions'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/test_extensions; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_extensions test_extdepend
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85437
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test_extensions          ... ok
test test_extdepend           ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 2 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_extensions'
make -C test_parser check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_parser'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/test_parser; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_parser
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85500
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test_parser              ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_parser'
make -C test_pg_dump check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_pg_dump'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/test_pg_dump; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
TAP tests not enabled
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_pg_dump
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85550
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test_pg_dump             ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_pg_dump'
make -C test_rls_hooks check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_rls_hooks'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/test_rls_hooks; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --temp-config=../../../../src/test/modules/test_rls_hooks/rls_hooks.conf --dbname=contrib_regression test_rls_hooks
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85606
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test_rls_hooks           ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_rls_hooks'
make -C test_shm_mq check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_shm_mq'
make -C ../../../../src/test/regress pg_regress
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
make -C ../../../src/port all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/port'
make -C ../../../src/common all
make[3]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
make -C ../backend submake-errcodes
make[4]: Entering directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[4]: Nothing to be done for `submake-errcodes'.
make[4]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/backend'
make[3]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/regress'
for extra in src/test/modules/test_shm_mq; do make -C '../../../..'/$extra DESTDIR='/home/appusr/pg/postgresql-10.5'/tmp_install install >>'/home/appusr/pg/postgresql-10.5'/tmp_install/log/install.log || exit; done
PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/bin:$PATH" LD_LIBRARY_PATH="/home/appusr/pg/postgresql-10.5/tmp_install/home/appusr/PostgreSQL/pgsql-10/lib:$LD_LIBRARY_PATH" ../../../../src/test/regress/pg_regress --temp-instance=./tmp_check --inputdir=. --bindir=     --dbname=contrib_regression test_shm_mq
============== creating temporary instance            ==============
============== initializing database system           ==============
============== starting postmaster                    ==============
running on port 50853 with PID 85670
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test_shm_mq              ... ok
============== shutting down postmaster               ==============
============== removing temporary instance            ==============

=====================
 All 1 tests passed. 
=====================

make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/test_shm_mq'
make -C worker_spi check
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src/test/modules/worker_spi'
make[1]: Nothing to be done for `check'.
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules/worker_spi'
make: Leaving directory `/home/appusr/pg/postgresql-10.5/src/test/modules'

每个模块下面均有:
sql:里面存放测试用例的SQL文件
expected:里面存放测试用例期望输出的结果

pg_regress采用psql命令执行sql文件,将本次执行结果输出到result文件夹中
然后对比result和expected的文件,结果与期望一致,则测试通过,否则测试失败。

五、 coverage(测试代码覆盖率)

在postgres的编译选项中,有一个特别的选项:

--enable-coverage build with coverage testing instrumentation

如果使用GCC,所有的程序和库连同代码覆盖测试设置一起被编译。 在运行时,它们与代码覆盖率度量在编译目录下生成文件。

使用的工具有gcov、lcov:
gcov:一个可用于C/C++的代码覆盖工具,是gcc的内建工具。
lcov:用来解析程序gcov的输出结果,最终输出成html格式的报告。

缺少lcov组件:源码安装

[root@postgre appusr]# wget https://jaist.dl.sourceforge.net/project/ltp/Coverage%20Analysis/LCOV-1.13/lcov-1.13.tar.gz

[root@postgre appusr]# tar -zxvf lcov-1.13.tar.gz 

[root@postgre appusr]# cd lcov-1.13/
[root@postgre lcov-1.13]# make install

配置postgres编译选项

[appusr@postgre postgresql-10.5]$ export PGHOME=/home/appusr/PostgreSQL/pgsql-10
[appusr@postgre postgresql-10.5]$ ./configure --enable-rpath --prefix=$PGHOME --includedir=$PGHOME/include --mandir=$PGHOME/share/man --datadir=$PGHOME/share --with-icu --with-perl --with-python --with-tcl --with-tclconfig=/usr/lib64 --with-openssl --with-pam --with-gssapi --with-includes=/usr/include --with-libraries=/usr/lib64 --enable-nls --enable-dtrace --with-uuid=e2fs --with-libxml --with-libxslt --with-ldap --with-selinux --with-systemd --docdir=$PGHOME/doc --htmldir=$PGHOME/doc/html   --enable-debug  --enable-coverage

[appusr@postgre postgresql-10.5]$ make

测试代码覆盖率,并输出报告

[appusr@postgre postgresql-10.5]$ make check
[appusr@postgre postgresql-10.5]$ make coverage-html
make -C doc coverage
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/doc'
rm -f *.gcov .*.gcov
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/doc'
make -C src coverage
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src'
make -C common coverage
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
rm -f *.gcov .*.gcov
/usr/local/bin/lcov -d . -c -o lcov.info  --gcov-tool /usr/bin/gcov
Capturing coverage data from .
Found gcov version: 4.8.5
Scanning . for .gcda files ...
Found 30 data files in .
Processing pgfnames_srv.gcda
Processing sha2_openssl_srv.gcda
Processing wait_error_srv.gcda
Processing username_srv.gcda
Processing unicode_norm_srv.gcda
Processing string_srv.gcda
Processing scram-common_srv.gcda
Processing saslprep_srv.gcda
Processing rmtree_srv.gcda
Processing relpath_srv.gcda
Processing psprintf_srv.gcda
Processing pg_lzcompress_srv.gcda
Processing md5_srv.gcda
Processing keywords_srv.gcda
Processing ip_srv.gcda
Processing exec_srv.gcda
Processing controldata_utils_srv.gcda
Processing config_info_srv.gcda
Processing base64_srv.gcda
Processing restricted_token.gcda
Processing file_utils.gcda
Processing fe_memutils.gcda
Processing wait_error.gcda
Processing username.gcda
Processing rmtree.gcda
Processing psprintf.gcda
Processing pgfnames.gcda
Processing keywords.gcda
Processing exec.gcda
Processing controldata_utils.gcda
Finished .info-file creation
……

Processing file src/bin/psql/help.c
Processing file src/bin/psql/copy.c
Processing file src/bin/psql/startup.c
Processing file src/bin/psql/tab-complete.c
Processing file src/bin/psql/sql_help.c
Processing file src/bin/psql/variables.c
Processing file src/bin/psql/large_obj.c
Processing file src/bin/psql/mainloop.c
Processing file src/bin/psql/command.c
Processing file src/common/rmtree.c
Processing file src/common/pg_lzcompress.c
Processing file src/common/controldata_utils.c
Processing file src/common/unicode_norm.c
Processing file src/common/ip.c
Processing file src/common/string.c
Processing file src/common/username.c
Processing file src/common/relpath.c
Processing file src/common/config_info.c
Processing file src/common/file_utils.c
Processing file src/common/md5.c
Processing file src/common/keywords.c
Processing file src/common/restricted_token.c
Processing file src/common/fe_memutils.c
Processing file src/common/psprintf.c
Processing file src/common/base64.c
Processing file src/common/sha2_openssl.c
Processing file src/common/saslprep.c
Processing file src/common/pgfnames.c
Processing file src/common/exec.c
Processing file src/common/wait_error.c
Processing file src/common/scram-common.c
Processing file src/fe_utils/mbprint.c
Processing file src/fe_utils/string_utils.c
Processing file src/fe_utils/psqlscan.l
Processing file src/fe_utils/print.c
Processing file src/fe_utils/psqlscan.c
Processing file src/include/postgres.h
Processing file src/include/pgstat.h
Processing file src/include/access/gin_private.h
Processing file src/include/common/int128.h
Processing file src/include/executor/executor.h
Processing file src/include/lib/simplehash.h
Processing file src/include/lib/ilist.h
Processing file src/include/nodes/pg_list.h
Processing file src/include/port/atomics.h
Processing file src/include/port/atomics/generic-gcc.h
Processing file src/include/port/atomics/arch-x86.h
Processing file src/include/port/atomics/generic.h
Processing file src/include/replication/worker_internal.h
Processing file src/include/replication/walreceiver.h
Processing file src/include/storage/bufmgr.h
Processing file src/include/storage/s_lock.h
Processing file src/include/storage/checksum_impl.h
Processing file src/include/storage/proclist.h
Processing file src/include/utils/palloc.h
Processing file src/include/utils/memutils.h
Processing file src/include/utils/sortsupport.h
Processing file src/include/utils/arrayaccess.h
Processing file src/include/utils/rel.h
Processing file src/include/utils/hashutils.h
Processing file src/interfaces/libpq/chklocale.c
Processing file src/interfaces/libpq/ip.c
Processing file src/interfaces/libpq/thread.c
Processing file src/interfaces/libpq/base64.c
Processing file src/interfaces/libpq/fe-exec.c
Processing file src/interfaces/libpq/fe-secure-openssl.c
Processing file src/interfaces/libpq/fe-protocol2.c
Processing file src/interfaces/libpq/md5.c
Processing file src/interfaces/libpq/fe-auth-scram.c
Processing file src/interfaces/libpq/encnames.c
Processing file src/interfaces/libpq/fe-print.c
Processing file src/interfaces/libpq/unicode_norm.c
Processing file src/interfaces/libpq/scram-common.c
Processing file src/interfaces/libpq/wchar.c
Processing file src/interfaces/libpq/fe-connect.c
Processing file src/interfaces/libpq/pgstrcasecmp.c
Processing file src/interfaces/libpq/sha2_openssl.c
Processing file src/interfaces/libpq/fe-auth.c
Processing file src/interfaces/libpq/fe-lobj.c
Processing file src/interfaces/libpq/fe-secure.c
Processing file src/interfaces/libpq/pqsignal.c
Processing file src/interfaces/libpq/fe-protocol3.c
Processing file src/interfaces/libpq/inet_net_ntop.c
Processing file src/interfaces/libpq/strlcpy.c
Processing file src/interfaces/libpq/noblock.c
Processing file src/interfaces/libpq/getpeereid.c
Processing file src/interfaces/libpq/libpq-events.c
Processing file src/interfaces/libpq/pqexpbuffer.c
Processing file src/interfaces/libpq/pg_strong_random.c
Processing file src/interfaces/libpq/saslprep.c
Processing file src/interfaces/libpq/fe-misc.c
Processing file src/pl/plpgsql/src/pl_exec.c
Processing file src/pl/plpgsql/src/pl_gram.c
Processing file src/pl/plpgsql/src/pl_comp.c
Processing file src/pl/plpgsql/src/pl_handler.c
Processing file src/pl/plpgsql/src/pl_scanner.c
Processing file src/pl/plpgsql/src/pl_funcs.c
Processing file src/pl/plpgsql/src/pl_gram.y
Processing file src/port/pg_crc32c_choose.c
Processing file src/port/strlcat.c
Processing file src/port/pgstrcasecmp.c
Processing file src/port/fls.c
Processing file src/port/qsort.c
Processing file src/port/getpeereid.c
Processing file src/port/chklocale.c
Processing file src/port/pgmkdirp.c
Processing file src/port/sprompt.c
Processing file src/port/pg_strong_random.c
Processing file src/port/noblock.c
Processing file src/port/erand48.c
Processing file src/port/pgcheckdir.c
Processing file src/port/path.c
Processing file src/port/pg_crc32c_sb8.c
Processing file src/port/inet_net_ntop.c
Processing file src/port/tar.c
Processing file src/port/strlcpy.c
Processing file src/port/pqsignal.c
Processing file src/port/qsort_arg.c
Processing file src/port/thread.c
Processing file src/port/quotes.c
Processing file src/port/pgsleep.c
Processing file src/port/pg_crc32c_sse42.c
Processing file src/test/regress/regress.c
Processing file src/test/regress/pg_regress.c
Processing file src/test/regress/pg_regress_main.c
Processing file src/timezone/strftime.c
Processing file src/timezone/pgtz.c
Processing file src/timezone/localtime.c
Processing file src/timezone/zic.c
Processing file /usr/include/arpa/inet.h
Processing file /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/cpuid.h
Processing file /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include/smmintrin.h
Writing directory view page.
Overall coverage rate:
  lines......: 64.8% (198834 of 306722 lines)
  functions..: 71.7% (11840 of 16503 functions)

测试报告:


LCOV - PostgreSQL.png

错误处理

[appusr@postgre postgresql-10.5]$ make coverage-html
make -C doc coverage
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/doc'
rm -f *.gcov .*.gcov
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/doc'
make -C src coverage
make[1]: Entering directory `/home/appusr/pg/postgresql-10.5/src'
make -C common coverage
make[2]: Entering directory `/home/appusr/pg/postgresql-10.5/src/common'
rm -f *.gcov .*.gcov
/usr/local/bin/lcov -d . -c -o lcov.info  --gcov-tool /usr/bin/gcov
Capturing coverage data from .
Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/bin/geninfo line 57.
BEGIN failed--compilation aborted at /usr/local/bin/geninfo line 57.
make[2]: *** [lcov.info] Error 2
make[2]: Leaving directory `/home/appusr/pg/postgresql-10.5/src/common'
make[1]: *** [coverage-common-recurse] Error 2
make[1]: Leaving directory `/home/appusr/pg/postgresql-10.5/src'
make: *** [coverage-src-recurse] Error 2

原因是:缺少perl-Digest-MD5包, 安装perl-Digest-MD5即可解决。

# yum -y install perl-Digest-MD5

六、内存检测(未完成,后续补上)

利用 valgrind 来进行内存检测
gprof 和 oprofile 进行性能分析

上一篇下一篇

猜你喜欢

热点阅读