diff --git a/src/test/regress/expected/discard.out b/src/test/regress/expected/discard.out
new file mode 100644
index 0000000..4125680
--- /dev/null
+++ b/src/test/regress/expected/discard.out
@@ -0,0 +1,132 @@
+--
+-- DISCARD
+--
+--
+-- Test DISCARD ALL
+--
+-- DISCARD ALL: do changes
+DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+PREPARE foo AS SELECT 1;
+LISTEN foo_event;
+SET vacuum_cost_delay = 13;
+CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+CREATE ROLE temp_reset_user;
+SET SESSION AUTHORIZATION temp_reset_user;
+-- DISCARD ALL: look changes
+SELECT pg_listening_channels();
+ pg_listening_channels 
+-----------------------
+ foo_event
+(1 row)
+
+SELECT name FROM pg_prepared_statements;
+ name 
+------
+ foo
+(1 row)
+
+SELECT name FROM pg_cursors;
+ name 
+------
+ foo
+(1 row)
+
+SHOW vacuum_cost_delay;
+ vacuum_cost_delay 
+-------------------
+ 13ms
+(1 row)
+
+SELECT relname from pg_class where relname = 'tmp_foo';
+ relname 
+---------
+ tmp_foo
+(1 row)
+
+SELECT current_user = 'temp_reset_user';
+ ?column? 
+----------
+ t
+(1 row)
+
+-- DISCARD ALL: discard everything
+DISCARD ALL;
+-- DISCARD ALL: look again
+SELECT pg_listening_channels();
+ pg_listening_channels 
+-----------------------
+(0 rows)
+
+SELECT name FROM pg_prepared_statements;
+ name 
+------
+(0 rows)
+
+SELECT name FROM pg_cursors;
+ name 
+------
+(0 rows)
+
+SHOW vacuum_cost_delay;
+ vacuum_cost_delay 
+-------------------
+ 0
+(1 row)
+
+SELECT relname from pg_class where relname = 'tmp_foo';
+ relname 
+---------
+(0 rows)
+
+SELECT current_user = 'temp_reset_user';
+ ?column? 
+----------
+ f
+(1 row)
+
+DROP ROLE temp_reset_user;
+--
+-- Test DISCARD TEMP
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+  relname   
+------------
+ reset_test
+(1 row)
+
+DISCARD TEMP;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname 
+---------
+(0 rows)
+
+--
+-- Test DISCARD TEMPORARY (ensuring the alias works as expected)
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+  relname   
+------------
+ reset_test
+(1 row)
+
+DISCARD TEMPORARY;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname 
+---------
+(0 rows)
+
+-- Not sure how to cross-check whether this worked. But this atleast
+-- would trigger an alarm if it gives any unexpected output
+DISCARD PLANS;
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ERROR:  DISCARD ALL cannot run inside a transaction block
+ROLLBACK;
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
+ERROR:  syntax error at or near "invalid_option"
+LINE 1: DISCARD invalid_option;
+                ^
diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out
index 271706d..3a2100c 100644
--- a/src/test/regress/expected/guc.out
+++ b/src/test/regress/expected/guc.out
@@ -505,106 +505,6 @@ SELECT '2006-08-13 12:34:56'::timestamptz;
 (1 row)
 
 --
--- Test DISCARD TEMP
---
-CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-  relname   
-------------
- reset_test
-(1 row)
-
-DISCARD TEMP;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
- relname 
----------
-(0 rows)
-
---
--- Test DISCARD ALL
---
--- do changes
-DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
-PREPARE foo AS SELECT 1;
-LISTEN foo_event;
-SET vacuum_cost_delay = 13;
-CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
-CREATE ROLE temp_reset_user;
-SET SESSION AUTHORIZATION temp_reset_user;
--- look changes
-SELECT pg_listening_channels();
- pg_listening_channels 
------------------------
- foo_event
-(1 row)
-
-SELECT name FROM pg_prepared_statements;
- name 
-------
- foo
-(1 row)
-
-SELECT name FROM pg_cursors;
- name 
-------
- foo
-(1 row)
-
-SHOW vacuum_cost_delay;
- vacuum_cost_delay 
--------------------
- 13ms
-(1 row)
-
-SELECT relname from pg_class where relname = 'tmp_foo';
- relname 
----------
- tmp_foo
-(1 row)
-
-SELECT current_user = 'temp_reset_user';
- ?column? 
-----------
- t
-(1 row)
-
--- discard everything
-DISCARD ALL;
--- look again
-SELECT pg_listening_channels();
- pg_listening_channels 
------------------------
-(0 rows)
-
-SELECT name FROM pg_prepared_statements;
- name 
-------
-(0 rows)
-
-SELECT name FROM pg_cursors;
- name 
-------
-(0 rows)
-
-SHOW vacuum_cost_delay;
- vacuum_cost_delay 
--------------------
- 0
-(1 row)
-
-SELECT relname from pg_class where relname = 'tmp_foo';
- relname 
----------
-(0 rows)
-
-SELECT current_user = 'temp_reset_user';
- ?column? 
-----------
- f
-(1 row)
-
-DROP ROLE temp_reset_user;
---
 -- search_path should react to changes in pg_namespace
 --
 set search_path = foo, public, not_there_initially;
diff --git a/src/test/regress/sql/discard.sql b/src/test/regress/sql/discard.sql
new file mode 100644
index 0000000..4c7377c
--- /dev/null
+++ b/src/test/regress/sql/discard.sql
@@ -0,0 +1,61 @@
+--
+-- DISCARD
+--
+
+--
+-- Test DISCARD ALL
+--
+-- DISCARD ALL: do changes
+DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+PREPARE foo AS SELECT 1;
+LISTEN foo_event;
+SET vacuum_cost_delay = 13;
+CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+CREATE ROLE temp_reset_user;
+SET SESSION AUTHORIZATION temp_reset_user;
+-- DISCARD ALL: look changes
+SELECT pg_listening_channels();
+SELECT name FROM pg_prepared_statements;
+SELECT name FROM pg_cursors;
+SHOW vacuum_cost_delay;
+SELECT relname from pg_class where relname = 'tmp_foo';
+SELECT current_user = 'temp_reset_user';
+-- DISCARD ALL: discard everything
+DISCARD ALL;
+-- DISCARD ALL: look again
+SELECT pg_listening_channels();
+SELECT name FROM pg_prepared_statements;
+SELECT name FROM pg_cursors;
+SHOW vacuum_cost_delay;
+SELECT relname from pg_class where relname = 'tmp_foo';
+SELECT current_user = 'temp_reset_user';
+DROP ROLE temp_reset_user;
+
+
+--
+-- Test DISCARD TEMP
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+DISCARD TEMP;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+--
+-- Test DISCARD TEMPORARY (ensuring the alias works as expected)
+--
+CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+DISCARD TEMPORARY;
+SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+-- Not sure how to cross-check whether this worked. But this atleast
+-- would trigger an alarm if it gives any unexpected output
+DISCARD PLANS;
+
+-- Should fail. DISCARD ALL should not work within a transaction
+BEGIN TRANSACTION;
+DISCARD ALL;
+ROLLBACK;
+
+-- Should fail. Invalid DISCARD option
+DISCARD invalid_option;
diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql
index 0c21792..e1be53b 100644
--- a/src/test/regress/sql/guc.sql
+++ b/src/test/regress/sql/guc.sql
@@ -144,43 +144,6 @@ RESET datestyle;
 SHOW datestyle;
 SELECT '2006-08-13 12:34:56'::timestamptz;
 
---
--- Test DISCARD TEMP
---
-CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-DISCARD TEMP;
-SELECT relname FROM pg_class WHERE relname = 'reset_test';
-
---
--- Test DISCARD ALL
---
-
--- do changes
-DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
-PREPARE foo AS SELECT 1;
-LISTEN foo_event;
-SET vacuum_cost_delay = 13;
-CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
-CREATE ROLE temp_reset_user;
-SET SESSION AUTHORIZATION temp_reset_user;
--- look changes
-SELECT pg_listening_channels();
-SELECT name FROM pg_prepared_statements;
-SELECT name FROM pg_cursors;
-SHOW vacuum_cost_delay;
-SELECT relname from pg_class where relname = 'tmp_foo';
-SELECT current_user = 'temp_reset_user';
--- discard everything
-DISCARD ALL;
--- look again
-SELECT pg_listening_channels();
-SELECT name FROM pg_prepared_statements;
-SELECT name FROM pg_cursors;
-SHOW vacuum_cost_delay;
-SELECT relname from pg_class where relname = 'tmp_foo';
-SELECT current_user = 'temp_reset_user';
-DROP ROLE temp_reset_user;
 
 --
 -- search_path should react to changes in pg_namespace