mirror of
https://github.com/postgres/postgres.git
synced 2026-02-03 20:40:14 -05:00
RESET SESSION, RESET PLANS, and RESET TEMP are now DISCARD ALL, DISCARD PLANS, and DISCARD TEMP, respectively. This is to avoid confusion with the pre-existing RESET variants: the DISCARD commands are not actually similar to RESET. Patch from Marko Kreen, with some minor editorialization.
164 lines
4.2 KiB
PL/PgSQL
164 lines
4.2 KiB
PL/PgSQL
-- pg_regress should ensure that this default value applies; however
|
|
-- we can't rely on any specific default value of vacuum_cost_delay
|
|
SHOW datestyle;
|
|
|
|
-- SET to some nondefault value
|
|
SET vacuum_cost_delay TO 400;
|
|
SET datestyle = 'ISO, YMD';
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
-- SET LOCAL has no effect outside of a transaction
|
|
SET LOCAL vacuum_cost_delay TO 500;
|
|
SHOW vacuum_cost_delay;
|
|
SET LOCAL datestyle = 'SQL';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
-- SET LOCAL within a transaction that commits
|
|
BEGIN;
|
|
SET LOCAL vacuum_cost_delay TO 500;
|
|
SHOW vacuum_cost_delay;
|
|
SET LOCAL datestyle = 'SQL';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
COMMIT;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
-- SET should be reverted after ROLLBACK
|
|
BEGIN;
|
|
SET vacuum_cost_delay TO 600;
|
|
SHOW vacuum_cost_delay;
|
|
SET datestyle = 'German';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
-- Some tests with subtransactions
|
|
BEGIN;
|
|
SET vacuum_cost_delay TO 700;
|
|
SET datestyle = 'MDY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT first_sp;
|
|
SET vacuum_cost_delay TO 800;
|
|
SHOW vacuum_cost_delay;
|
|
SET datestyle = 'German, DMY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK TO first_sp;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT second_sp;
|
|
SET vacuum_cost_delay TO 900;
|
|
SET datestyle = 'SQL, YMD';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT third_sp;
|
|
SET vacuum_cost_delay TO 1000;
|
|
SHOW vacuum_cost_delay;
|
|
SET datestyle = 'Postgres, MDY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK TO third_sp;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK TO second_sp;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
-- SET LOCAL with Savepoints
|
|
BEGIN;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT sp;
|
|
SET LOCAL vacuum_cost_delay TO 300;
|
|
SHOW vacuum_cost_delay;
|
|
SET LOCAL datestyle = 'Postgres, MDY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK TO sp;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
ROLLBACK;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
-- SET followed by SET LOCAL
|
|
BEGIN;
|
|
SET vacuum_cost_delay TO 400;
|
|
SET LOCAL vacuum_cost_delay TO 500;
|
|
SHOW vacuum_cost_delay;
|
|
SET datestyle = 'ISO, DMY';
|
|
SET LOCAL datestyle = 'Postgres, MDY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
COMMIT;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
|
|
--
|
|
-- Test RESET. We use datestyle because the reset value is forced by
|
|
-- pg_regress, so it doesn't depend on the installation's configuration.
|
|
--
|
|
SET datestyle = iso, ymd;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
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 relname FROM pg_listener;
|
|
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 relname FROM pg_listener;
|
|
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;
|
|
|