diff --git a/contrib/pg_stat_statements/Makefile b/contrib/pg_stat_statements/Makefile
index ddcdb10..8f67c6a 100644
--- a/contrib/pg_stat_statements/Makefile
+++ b/contrib/pg_stat_statements/Makefile
@@ -11,6 +11,10 @@ PGFILEDESC = "pg_stat_statements - execution statistics of SQL statements"
 
 LDFLAGS_SL += $(filter -lm, $(LIBS))
 
+# Note: because we don't tell the Makefile there are any regression tests,
+# we have to clean those result files explicitly
+EXTRA_CLEAN = $(pg_regress_clean_files) ./regression_output
+
 ifdef USE_PGXS
 PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
@@ -21,3 +25,29 @@ top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
+
+# Disabled because these tests require "shared_preload_libraries=pg_stat_statements",
+# which typical installcheck users do not have (e.g. buildfarm clients).
+installcheck:;
+
+check: regresscheck
+
+submake-regress:
+	$(MAKE) -C $(top_builddir)/src/test/regress all 
+
+submake-pg_stat_statements:
+	$(MAKE) -C $(top_builddir)/contrib/pg_stat_statements
+
+REGRESSCHECKS=pg_stat_statements
+
+regresscheck: | submake-regress submake-pg_stat_statements temp-install
+	$(MKDIR_P) regression_output
+	$(pg_regress_check) \
+	--temp-config $(top_srcdir)/contrib/pg_stat_statements/pg_stat_statements.conf \
+	--temp-instance=./tmp_check \
+	--outputdir=./regression_output \
+ 	$(REGRESSCHECKS)
+
+.PHONY: submake-pg_stat_statements submake_regress check regresscheck
+
+temp-install: EXTRA_INSTALL=contrib/pg_stat_statements
diff --git a/contrib/pg_stat_statements/expected/pg_stat_statements.out b/contrib/pg_stat_statements/expected/pg_stat_statements.out
new file mode 100644
index 0000000..decb226
--- /dev/null
+++ b/contrib/pg_stat_statements/expected/pg_stat_statements.out
@@ -0,0 +1,21 @@
+CREATE EXTENSION pg_stat_statements;
+CREATE TABLE test (a int, b char(20));
+-- test the basic functionality of pg_stat_statements
+SELECT pg_stat_statements_reset();
+ pg_stat_statements_reset 
+--------------------------
+ 
+(1 row)
+
+INSERT INTO test VALUES(generate_series(1, 10), 'aaa');
+UPDATE test SET b = 'bbb' WHERE a > 5;
+SELECT queryid, query, calls, rows from pg_stat_statements ORDER BY rows;
+  queryid   |                       query                        | calls | rows 
+------------+----------------------------------------------------+-------+------
+  190868975 | SELECT pg_stat_statements_reset();                 |     1 |    1
+ 1181103097 | UPDATE test SET b = ? WHERE a > ?;                 |     1 |    5
+ 2522140409 | INSERT INTO test VALUES(generate_series(?, ?), ?); |     1 |   10
+(3 rows)
+
+DROP TABLE test;
+DROP EXTENSION pg_stat_statements;
diff --git a/contrib/pg_stat_statements/pg_stat_statements.conf b/contrib/pg_stat_statements/pg_stat_statements.conf
new file mode 100644
index 0000000..13346e2
--- /dev/null
+++ b/contrib/pg_stat_statements/pg_stat_statements.conf
@@ -0,0 +1 @@
+shared_preload_libraries = 'pg_stat_statements'
diff --git a/contrib/pg_stat_statements/sql/pg_stat_statements.sql b/contrib/pg_stat_statements/sql/pg_stat_statements.sql
new file mode 100644
index 0000000..2f16cb5
--- /dev/null
+++ b/contrib/pg_stat_statements/sql/pg_stat_statements.sql
@@ -0,0 +1,15 @@
+CREATE EXTENSION pg_stat_statements;
+
+CREATE TABLE test (a int, b char(20));
+
+-- test the basic functionality of pg_stat_statements
+SELECT pg_stat_statements_reset();
+
+INSERT INTO test VALUES(generate_series(1, 10), 'aaa');
+UPDATE test SET b = 'bbb' WHERE a > 5;
+
+SELECT queryid, query, calls, rows from pg_stat_statements ORDER BY rows;
+
+DROP TABLE test;
+
+DROP EXTENSION pg_stat_statements;
