mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-16 11:26:59 +08:00
style by default. Per discussion, there seems to be hardly anything that really relies on being able to change the regex flavor, so the ability to select it via embedded options ought to be enough for any stragglers. Also, if we didn't remove the GUC, we'd really be morally obligated to mark the regex functions non-immutable, which'd possibly create performance issues.
254 lines
6.3 KiB
PL/PgSQL
254 lines
6.3 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 40;
|
|
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 50;
|
|
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 50;
|
|
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 60;
|
|
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 70;
|
|
SET datestyle = 'MDY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT first_sp;
|
|
SET vacuum_cost_delay TO 80;
|
|
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 90;
|
|
SET datestyle = 'SQL, YMD';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT third_sp;
|
|
SET vacuum_cost_delay TO 100;
|
|
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 30;
|
|
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 LOCAL persists through RELEASE (which was not true in 8.0-8.2)
|
|
BEGIN;
|
|
SHOW vacuum_cost_delay;
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
SAVEPOINT sp;
|
|
SET LOCAL vacuum_cost_delay TO 30;
|
|
SHOW vacuum_cost_delay;
|
|
SET LOCAL datestyle = 'Postgres, MDY';
|
|
SHOW datestyle;
|
|
SELECT '2006-08-13 12:34:56'::timestamptz;
|
|
RELEASE SAVEPOINT 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 40;
|
|
SET LOCAL vacuum_cost_delay TO 50;
|
|
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;
|
|
|
|
--
|
|
-- Tests for function-local GUC settings
|
|
--
|
|
|
|
set work_mem = '3MB';
|
|
|
|
create function report_guc(text) returns text as
|
|
$$ select current_setting($1) $$ language sql
|
|
set work_mem = '1MB';
|
|
|
|
select report_guc('work_mem'), current_setting('work_mem');
|
|
|
|
-- this should draw only a warning
|
|
alter function report_guc(text) set search_path = no_such_schema;
|
|
|
|
-- with error occurring here
|
|
select report_guc('work_mem'), current_setting('work_mem');
|
|
|
|
alter function report_guc(text) reset search_path set work_mem = '2MB';
|
|
|
|
select report_guc('work_mem'), current_setting('work_mem');
|
|
|
|
alter function report_guc(text) reset all;
|
|
|
|
select report_guc('work_mem'), current_setting('work_mem');
|
|
|
|
-- SET LOCAL is restricted by a function SET option
|
|
create or replace function myfunc(int) returns text as $$
|
|
begin
|
|
set local work_mem = '2MB';
|
|
return current_setting('work_mem');
|
|
end $$
|
|
language plpgsql
|
|
set work_mem = '1MB';
|
|
|
|
select myfunc(0), current_setting('work_mem');
|
|
|
|
alter function myfunc(int) reset all;
|
|
|
|
select myfunc(0), current_setting('work_mem');
|
|
|
|
set work_mem = '3MB';
|
|
|
|
-- but SET isn't
|
|
create or replace function myfunc(int) returns text as $$
|
|
begin
|
|
set work_mem = '2MB';
|
|
return current_setting('work_mem');
|
|
end $$
|
|
language plpgsql
|
|
set work_mem = '1MB';
|
|
|
|
select myfunc(0), current_setting('work_mem');
|
|
|
|
set work_mem = '3MB';
|
|
|
|
-- it should roll back on error, though
|
|
create or replace function myfunc(int) returns text as $$
|
|
begin
|
|
set work_mem = '2MB';
|
|
perform 1/$1;
|
|
return current_setting('work_mem');
|
|
end $$
|
|
language plpgsql
|
|
set work_mem = '1MB';
|
|
|
|
select myfunc(0);
|
|
select current_setting('work_mem');
|
|
select myfunc(1), current_setting('work_mem');
|