Add more tests for reloptions
This is preparation for a future patch to extensively change how reloptions work. Author: Nikolay Shaplov Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/2615372.orqtEn8VGB@x200m
This commit is contained in:
parent
752871b6de
commit
4b95cc1dc3
@ -210,3 +210,20 @@ ORDER BY 1;
|
||||
text_ops | t
|
||||
(2 rows)
|
||||
|
||||
--
|
||||
-- relation options
|
||||
--
|
||||
DROP INDEX bloomidx;
|
||||
CREATE INDEX bloomidx ON tst USING bloom (i, t) WITH (length=7, col1=4);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'bloomidx'::regclass;
|
||||
reloptions
|
||||
-------------------
|
||||
{length=7,col1=4}
|
||||
(1 row)
|
||||
|
||||
-- check for min and max values
|
||||
\set VERBOSITY terse
|
||||
CREATE INDEX bloomidx2 ON tst USING bloom (i, t) WITH (length=0);
|
||||
ERROR: value 0 out of bounds for option "length"
|
||||
CREATE INDEX bloomidx2 ON tst USING bloom (i, t) WITH (col1=0);
|
||||
ERROR: value 0 out of bounds for option "col1"
|
||||
|
@ -81,3 +81,14 @@ SELECT opcname, amvalidate(opc.oid)
|
||||
FROM pg_opclass opc JOIN pg_am am ON am.oid = opcmethod
|
||||
WHERE amname = 'bloom'
|
||||
ORDER BY 1;
|
||||
|
||||
--
|
||||
-- relation options
|
||||
--
|
||||
DROP INDEX bloomidx;
|
||||
CREATE INDEX bloomidx ON tst USING bloom (i, t) WITH (length=7, col1=4);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'bloomidx'::regclass;
|
||||
-- check for min and max values
|
||||
\set VERBOSITY terse
|
||||
CREATE INDEX bloomidx2 ON tst USING bloom (i, t) WITH (length=0);
|
||||
CREATE INDEX bloomidx2 ON tst USING bloom (i, t) WITH (col1=0);
|
||||
|
@ -3644,3 +3644,10 @@ create table parted_validate_test_1 partition of parted_validate_test for values
|
||||
alter table parted_validate_test add constraint parted_validate_test_chka check (a > 0) not valid;
|
||||
alter table parted_validate_test validate constraint parted_validate_test_chka;
|
||||
drop table parted_validate_test;
|
||||
-- test alter column options
|
||||
CREATE TABLE tmp(i integer);
|
||||
INSERT INTO tmp VALUES (1);
|
||||
ALTER TABLE tmp ALTER COLUMN i SET (n_distinct = 1, n_distinct_inherited = 2);
|
||||
ALTER TABLE tmp ALTER COLUMN i RESET (n_distinct_inherited);
|
||||
ANALYZE tmp;
|
||||
DROP TABLE tmp;
|
||||
|
@ -2337,7 +2337,7 @@ Options: fastupdate=on, gin_pending_list_limit=128
|
||||
CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops);
|
||||
CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops);
|
||||
CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops);
|
||||
CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops);
|
||||
CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops) WITH (fillfactor=60);
|
||||
CREATE UNLOGGED TABLE unlogged_hash_table (id int4);
|
||||
CREATE INDEX unlogged_hash_index ON unlogged_hash_table USING hash (id int4_ops);
|
||||
DROP TABLE unlogged_hash_table;
|
||||
|
@ -5,6 +5,21 @@
|
||||
-- testing GiST code itself. Vacuuming in particular.
|
||||
create table gist_point_tbl(id int4, p point);
|
||||
create index gist_pointidx on gist_point_tbl using gist(p);
|
||||
-- Verify the fillfactor and buffering options
|
||||
create index gist_pointidx2 on gist_point_tbl using gist(p) with (buffering = on, fillfactor=50);
|
||||
create index gist_pointidx3 on gist_point_tbl using gist(p) with (buffering = off);
|
||||
create index gist_pointidx4 on gist_point_tbl using gist(p) with (buffering = auto);
|
||||
drop index gist_pointidx2, gist_pointidx3, gist_pointidx4;
|
||||
-- Make sure bad values are refused
|
||||
create index gist_pointidx5 on gist_point_tbl using gist(p) with (buffering = invalid_value);
|
||||
ERROR: invalid value for "buffering" option
|
||||
DETAIL: Valid values are "on", "off", and "auto".
|
||||
create index gist_pointidx5 on gist_point_tbl using gist(p) with (fillfactor=9);
|
||||
ERROR: value 9 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
create index gist_pointidx5 on gist_point_tbl using gist(p) with (fillfactor=101);
|
||||
ERROR: value 101 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
-- Insert enough data to create a tree that's a couple of levels deep.
|
||||
insert into gist_point_tbl (id, p)
|
||||
select g, point(g*10, g*10) from generate_series(1, 10000) g;
|
||||
@ -17,6 +32,9 @@ delete from gist_point_tbl where id % 2 = 1;
|
||||
-- would exercise it)
|
||||
delete from gist_point_tbl where id < 10000;
|
||||
vacuum analyze gist_point_tbl;
|
||||
-- rebuild the index with a different fillfactor
|
||||
alter index gist_pointidx SET (fillfactor = 40);
|
||||
reindex index gist_pointidx;
|
||||
--
|
||||
-- Test Index-only plans on GiST indexes
|
||||
--
|
||||
|
@ -217,6 +217,9 @@ END;
|
||||
DELETE FROM hash_split_heap WHERE keycol = 1;
|
||||
INSERT INTO hash_split_heap SELECT a/2 FROM generate_series(1, 25000) a;
|
||||
VACUUM hash_split_heap;
|
||||
-- Rebuild the index using a different fillfactor
|
||||
ALTER INDEX hash_split_index SET (fillfactor = 10);
|
||||
REINDEX INDEX hash_split_index;
|
||||
-- Clean up.
|
||||
DROP TABLE hash_split_heap;
|
||||
-- Index on temp table.
|
||||
@ -229,3 +232,12 @@ CREATE TABLE hash_heap_float4 (x float4, y int);
|
||||
INSERT INTO hash_heap_float4 VALUES (1.1,1);
|
||||
CREATE INDEX hash_idx ON hash_heap_float4 USING hash (x);
|
||||
DROP TABLE hash_heap_float4 CASCADE;
|
||||
-- Test out-of-range fillfactor values
|
||||
CREATE INDEX hash_f8_index2 ON hash_f8_heap USING hash (random float8_ops)
|
||||
WITH (fillfactor=9);
|
||||
ERROR: value 9 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
CREATE INDEX hash_f8_index2 ON hash_f8_heap USING hash (random float8_ops)
|
||||
WITH (fillfactor=101);
|
||||
ERROR: value 101 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
|
185
src/test/regress/expected/reloptions.out
Normal file
185
src/test/regress/expected/reloptions.out
Normal file
@ -0,0 +1,185 @@
|
||||
-- Simple create
|
||||
CREATE TABLE reloptions_test(i INT) WITH (FiLLFaCToR=30,
|
||||
autovacuum_enabled = false, autovacuum_analyze_scale_factor = 0.2);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
reloptions
|
||||
------------------------------------------------------------------------------
|
||||
{fillfactor=30,autovacuum_enabled=false,autovacuum_analyze_scale_factor=0.2}
|
||||
(1 row)
|
||||
|
||||
-- Fail min/max values check
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=2);
|
||||
ERROR: value 2 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=110);
|
||||
ERROR: value 110 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor = -10.0);
|
||||
ERROR: value -10.0 out of bounds for option "autovacuum_analyze_scale_factor"
|
||||
DETAIL: Valid values are between "0.000000" and "100.000000".
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor = 110.0);
|
||||
ERROR: value 110.0 out of bounds for option "autovacuum_analyze_scale_factor"
|
||||
DETAIL: Valid values are between "0.000000" and "100.000000".
|
||||
-- Fail when option and namespace do not exist
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (not_existing_option=2);
|
||||
ERROR: unrecognized parameter "not_existing_option"
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (not_existing_namespace.fillfactor=2);
|
||||
ERROR: unrecognized parameter namespace "not_existing_namespace"
|
||||
-- Fail while setting improper values
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=30.5);
|
||||
ERROR: invalid value for integer option "fillfactor": 30.5
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor='string');
|
||||
ERROR: invalid value for integer option "fillfactor": string
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=true);
|
||||
ERROR: invalid value for integer option "fillfactor": true
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_enabled=12);
|
||||
ERROR: invalid value for boolean option "autovacuum_enabled": 12
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_enabled=30.5);
|
||||
ERROR: invalid value for boolean option "autovacuum_enabled": 30.5
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_enabled='string');
|
||||
ERROR: invalid value for boolean option "autovacuum_enabled": string
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor='string');
|
||||
ERROR: invalid value for floating point option "autovacuum_analyze_scale_factor": string
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor=true);
|
||||
ERROR: invalid value for floating point option "autovacuum_analyze_scale_factor": true
|
||||
-- Fail if option is specified twice
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=30, fillfactor=40);
|
||||
ERROR: parameter "fillfactor" specified more than once
|
||||
-- Specifying name only for a non-Boolean option should fail
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor);
|
||||
ERROR: invalid value for integer option "fillfactor": true
|
||||
-- Simple ALTER TABLE
|
||||
ALTER TABLE reloptions_test SET (fillfactor=31,
|
||||
autovacuum_analyze_scale_factor = 0.3);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
reloptions
|
||||
------------------------------------------------------------------------------
|
||||
{autovacuum_enabled=false,fillfactor=31,autovacuum_analyze_scale_factor=0.3}
|
||||
(1 row)
|
||||
|
||||
-- Set boolean option to true without specifying value
|
||||
ALTER TABLE reloptions_test SET (autovacuum_enabled, fillfactor=32);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
reloptions
|
||||
-----------------------------------------------------------------------------
|
||||
{autovacuum_analyze_scale_factor=0.3,autovacuum_enabled=true,fillfactor=32}
|
||||
(1 row)
|
||||
|
||||
-- Check that RESET works well
|
||||
ALTER TABLE reloptions_test RESET (fillfactor);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
reloptions
|
||||
---------------------------------------------------------------
|
||||
{autovacuum_analyze_scale_factor=0.3,autovacuum_enabled=true}
|
||||
(1 row)
|
||||
|
||||
-- Resetting all values causes the column to become null
|
||||
ALTER TABLE reloptions_test RESET (autovacuum_enabled,
|
||||
autovacuum_analyze_scale_factor);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass AND
|
||||
reloptions IS NULL;
|
||||
reloptions
|
||||
------------
|
||||
|
||||
(1 row)
|
||||
|
||||
-- RESET fails if a value is specified
|
||||
ALTER TABLE reloptions_test RESET (fillfactor=12);
|
||||
ERROR: RESET must not include values for parameters
|
||||
-- The OIDS option is not stored
|
||||
DROP TABLE reloptions_test;
|
||||
CREATE TABLE reloptions_test(i INT) WITH (fillfactor=20, oids=true);
|
||||
SELECT reloptions, relhasoids FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
reloptions | relhasoids
|
||||
-----------------+------------
|
||||
{fillfactor=20} | t
|
||||
(1 row)
|
||||
|
||||
-- Test toast.* options
|
||||
DROP TABLE reloptions_test;
|
||||
CREATE TABLE reloptions_test (s VARCHAR)
|
||||
WITH (toast.autovacuum_vacuum_cost_delay = 23);
|
||||
SELECT reltoastrelid as toast_oid
|
||||
FROM pg_class WHERE oid = 'reloptions_test'::regclass \gset
|
||||
SELECT reloptions FROM pg_class WHERE oid = :toast_oid;
|
||||
reloptions
|
||||
-----------------------------------
|
||||
{autovacuum_vacuum_cost_delay=23}
|
||||
(1 row)
|
||||
|
||||
ALTER TABLE reloptions_test SET (toast.autovacuum_vacuum_cost_delay = 24);
|
||||
SELECT reloptions FROM pg_class WHERE oid = :toast_oid;
|
||||
reloptions
|
||||
-----------------------------------
|
||||
{autovacuum_vacuum_cost_delay=24}
|
||||
(1 row)
|
||||
|
||||
ALTER TABLE reloptions_test RESET (toast.autovacuum_vacuum_cost_delay);
|
||||
SELECT reloptions FROM pg_class WHERE oid = :toast_oid;
|
||||
reloptions
|
||||
------------
|
||||
|
||||
(1 row)
|
||||
|
||||
-- Fail on non-existent options in toast namespace
|
||||
CREATE TABLE reloptions_test2 (i int) WITH (toast.not_existing_option = 42);
|
||||
ERROR: unrecognized parameter "not_existing_option"
|
||||
-- Mix TOAST & heap
|
||||
DROP TABLE reloptions_test;
|
||||
CREATE TABLE reloptions_test (s VARCHAR) WITH
|
||||
(toast.autovacuum_vacuum_cost_delay = 23,
|
||||
autovacuum_vacuum_cost_delay = 24, fillfactor = 40);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
reloptions
|
||||
-------------------------------------------------
|
||||
{autovacuum_vacuum_cost_delay=24,fillfactor=40}
|
||||
(1 row)
|
||||
|
||||
SELECT reloptions FROM pg_class WHERE oid = (
|
||||
SELECT reltoastrelid FROM pg_class WHERE oid = 'reloptions_test'::regclass);
|
||||
reloptions
|
||||
-----------------------------------
|
||||
{autovacuum_vacuum_cost_delay=23}
|
||||
(1 row)
|
||||
|
||||
--
|
||||
-- CREATE INDEX, ALTER INDEX for btrees
|
||||
--
|
||||
CREATE INDEX reloptions_test_idx ON reloptions_test (s) WITH (fillfactor=30);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test_idx'::regclass;
|
||||
reloptions
|
||||
-----------------
|
||||
{fillfactor=30}
|
||||
(1 row)
|
||||
|
||||
-- Fail when option and namespace do not exist
|
||||
CREATE INDEX reloptions_test_idx ON reloptions_test (s)
|
||||
WITH (not_existing_option=2);
|
||||
ERROR: unrecognized parameter "not_existing_option"
|
||||
CREATE INDEX reloptions_test_idx ON reloptions_test (s)
|
||||
WITH (not_existing_ns.fillfactor=2);
|
||||
ERROR: unrecognized parameter namespace "not_existing_ns"
|
||||
-- Check allowed ranges
|
||||
CREATE INDEX reloptions_test_idx2 ON reloptions_test (s) WITH (fillfactor=1);
|
||||
ERROR: value 1 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
CREATE INDEX reloptions_test_idx2 ON reloptions_test (s) WITH (fillfactor=130);
|
||||
ERROR: value 130 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
-- Check ALTER
|
||||
ALTER INDEX reloptions_test_idx SET (fillfactor=40);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test_idx'::regclass;
|
||||
reloptions
|
||||
-----------------
|
||||
{fillfactor=40}
|
||||
(1 row)
|
||||
|
||||
-- Check ALTER on empty reloption list
|
||||
CREATE INDEX reloptions_test_idx3 ON reloptions_test (s);
|
||||
ALTER INDEX reloptions_test_idx3 SET (fillfactor=40);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test_idx3'::regclass;
|
||||
reloptions
|
||||
-----------------
|
||||
{fillfactor=40}
|
||||
(1 row)
|
||||
|
@ -4,7 +4,7 @@
|
||||
-- There are other tests to test different SP-GiST opclasses. This is for
|
||||
-- testing SP-GiST code itself.
|
||||
create table spgist_point_tbl(id int4, p point);
|
||||
create index spgist_point_idx on spgist_point_tbl using spgist(p);
|
||||
create index spgist_point_idx on spgist_point_tbl using spgist(p) with (fillfactor = 75);
|
||||
-- Test vacuum-root operation. It gets invoked when the root is also a leaf,
|
||||
-- i.e. the index is very small.
|
||||
insert into spgist_point_tbl (id, p)
|
||||
@ -37,3 +37,13 @@ select g, 'baaaaaaaaaaaaaar' || g from generate_series(1, 1000) g;
|
||||
-- tuple to be moved to another page.
|
||||
insert into spgist_text_tbl (id, t)
|
||||
select -g, 'f' || repeat('o', 100-g) || 'surprise' from generate_series(1, 100) g;
|
||||
-- Test out-of-range fillfactor values
|
||||
create index spgist_point_idx2 on spgist_point_tbl using spgist(p) with (fillfactor = 9);
|
||||
ERROR: value 9 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
create index spgist_point_idx2 on spgist_point_tbl using spgist(p) with (fillfactor = 101);
|
||||
ERROR: value 101 out of bounds for option "fillfactor"
|
||||
DETAIL: Valid values are between "10" and "100".
|
||||
-- Modify fillfactor in existing index
|
||||
alter index spgist_point_idx set (fillfactor = 90);
|
||||
reindex index spgist_point_idx;
|
||||
|
@ -12,10 +12,10 @@ DROP TABLESPACE regress_tblspacewith;
|
||||
CREATE TABLESPACE regress_tblspace LOCATION '@testtablespace@';
|
||||
|
||||
-- try setting and resetting some properties for the new tablespace
|
||||
ALTER TABLESPACE regress_tblspace SET (random_page_cost = 1.0);
|
||||
ALTER TABLESPACE regress_tblspace SET (random_page_cost = 1.0, seq_page_cost = 1.1);
|
||||
ALTER TABLESPACE regress_tblspace SET (some_nonexistent_parameter = true); -- fail
|
||||
ALTER TABLESPACE regress_tblspace RESET (random_page_cost = 2.0); -- fail
|
||||
ALTER TABLESPACE regress_tblspace RESET (random_page_cost, seq_page_cost); -- ok
|
||||
ALTER TABLESPACE regress_tblspace RESET (random_page_cost, effective_io_concurrency); -- ok
|
||||
|
||||
-- create a schema we can use
|
||||
CREATE SCHEMA testschema;
|
||||
|
@ -14,12 +14,12 @@ DROP TABLESPACE regress_tblspacewith;
|
||||
-- create a tablespace we can use
|
||||
CREATE TABLESPACE regress_tblspace LOCATION '@testtablespace@';
|
||||
-- try setting and resetting some properties for the new tablespace
|
||||
ALTER TABLESPACE regress_tblspace SET (random_page_cost = 1.0);
|
||||
ALTER TABLESPACE regress_tblspace SET (random_page_cost = 1.0, seq_page_cost = 1.1);
|
||||
ALTER TABLESPACE regress_tblspace SET (some_nonexistent_parameter = true); -- fail
|
||||
ERROR: unrecognized parameter "some_nonexistent_parameter"
|
||||
ALTER TABLESPACE regress_tblspace RESET (random_page_cost = 2.0); -- fail
|
||||
ERROR: RESET must not include values for parameters
|
||||
ALTER TABLESPACE regress_tblspace RESET (random_page_cost, seq_page_cost); -- ok
|
||||
ALTER TABLESPACE regress_tblspace RESET (random_page_cost, effective_io_concurrency); -- ok
|
||||
-- create a schema we can use
|
||||
CREATE SCHEMA testschema;
|
||||
-- try a table
|
||||
|
@ -116,7 +116,7 @@ test: plancache limit plpgsql copy2 temp domain rangefuncs prepare without_oid c
|
||||
# ----------
|
||||
# Another group of parallel tests
|
||||
# ----------
|
||||
test: identity partition_join
|
||||
test: identity partition_join reloptions
|
||||
|
||||
# event triggers cannot run concurrently with any test that runs DDL
|
||||
test: event_trigger
|
||||
|
@ -180,5 +180,6 @@ test: with
|
||||
test: xml
|
||||
test: identity
|
||||
test: partition_join
|
||||
test: reloptions
|
||||
test: event_trigger
|
||||
test: stats
|
||||
|
@ -2427,3 +2427,10 @@ create table parted_validate_test_1 partition of parted_validate_test for values
|
||||
alter table parted_validate_test add constraint parted_validate_test_chka check (a > 0) not valid;
|
||||
alter table parted_validate_test validate constraint parted_validate_test_chka;
|
||||
drop table parted_validate_test;
|
||||
-- test alter column options
|
||||
CREATE TABLE tmp(i integer);
|
||||
INSERT INTO tmp VALUES (1);
|
||||
ALTER TABLE tmp ALTER COLUMN i SET (n_distinct = 1, n_distinct_inherited = 2);
|
||||
ALTER TABLE tmp ALTER COLUMN i RESET (n_distinct_inherited);
|
||||
ANALYZE tmp;
|
||||
DROP TABLE tmp;
|
||||
|
@ -682,7 +682,7 @@ CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops);
|
||||
|
||||
CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops);
|
||||
|
||||
CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops);
|
||||
CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops) WITH (fillfactor=60);
|
||||
|
||||
CREATE UNLOGGED TABLE unlogged_hash_table (id int4);
|
||||
CREATE INDEX unlogged_hash_index ON unlogged_hash_table USING hash (id int4_ops);
|
||||
|
@ -7,6 +7,17 @@
|
||||
create table gist_point_tbl(id int4, p point);
|
||||
create index gist_pointidx on gist_point_tbl using gist(p);
|
||||
|
||||
-- Verify the fillfactor and buffering options
|
||||
create index gist_pointidx2 on gist_point_tbl using gist(p) with (buffering = on, fillfactor=50);
|
||||
create index gist_pointidx3 on gist_point_tbl using gist(p) with (buffering = off);
|
||||
create index gist_pointidx4 on gist_point_tbl using gist(p) with (buffering = auto);
|
||||
drop index gist_pointidx2, gist_pointidx3, gist_pointidx4;
|
||||
|
||||
-- Make sure bad values are refused
|
||||
create index gist_pointidx5 on gist_point_tbl using gist(p) with (buffering = invalid_value);
|
||||
create index gist_pointidx5 on gist_point_tbl using gist(p) with (fillfactor=9);
|
||||
create index gist_pointidx5 on gist_point_tbl using gist(p) with (fillfactor=101);
|
||||
|
||||
-- Insert enough data to create a tree that's a couple of levels deep.
|
||||
insert into gist_point_tbl (id, p)
|
||||
select g, point(g*10, g*10) from generate_series(1, 10000) g;
|
||||
@ -24,6 +35,9 @@ delete from gist_point_tbl where id < 10000;
|
||||
|
||||
vacuum analyze gist_point_tbl;
|
||||
|
||||
-- rebuild the index with a different fillfactor
|
||||
alter index gist_pointidx SET (fillfactor = 40);
|
||||
reindex index gist_pointidx;
|
||||
|
||||
--
|
||||
-- Test Index-only plans on GiST indexes
|
||||
|
@ -178,6 +178,10 @@ INSERT INTO hash_split_heap SELECT a/2 FROM generate_series(1, 25000) a;
|
||||
|
||||
VACUUM hash_split_heap;
|
||||
|
||||
-- Rebuild the index using a different fillfactor
|
||||
ALTER INDEX hash_split_index SET (fillfactor = 10);
|
||||
REINDEX INDEX hash_split_index;
|
||||
|
||||
-- Clean up.
|
||||
DROP TABLE hash_split_heap;
|
||||
|
||||
@ -192,3 +196,9 @@ CREATE TABLE hash_heap_float4 (x float4, y int);
|
||||
INSERT INTO hash_heap_float4 VALUES (1.1,1);
|
||||
CREATE INDEX hash_idx ON hash_heap_float4 USING hash (x);
|
||||
DROP TABLE hash_heap_float4 CASCADE;
|
||||
|
||||
-- Test out-of-range fillfactor values
|
||||
CREATE INDEX hash_f8_index2 ON hash_f8_heap USING hash (random float8_ops)
|
||||
WITH (fillfactor=9);
|
||||
CREATE INDEX hash_f8_index2 ON hash_f8_heap USING hash (random float8_ops)
|
||||
WITH (fillfactor=101);
|
||||
|
113
src/test/regress/sql/reloptions.sql
Normal file
113
src/test/regress/sql/reloptions.sql
Normal file
@ -0,0 +1,113 @@
|
||||
|
||||
-- Simple create
|
||||
CREATE TABLE reloptions_test(i INT) WITH (FiLLFaCToR=30,
|
||||
autovacuum_enabled = false, autovacuum_analyze_scale_factor = 0.2);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
|
||||
-- Fail min/max values check
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=2);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=110);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor = -10.0);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor = 110.0);
|
||||
|
||||
-- Fail when option and namespace do not exist
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (not_existing_option=2);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (not_existing_namespace.fillfactor=2);
|
||||
|
||||
-- Fail while setting improper values
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=30.5);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor='string');
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=true);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_enabled=12);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_enabled=30.5);
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_enabled='string');
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor='string');
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (autovacuum_analyze_scale_factor=true);
|
||||
|
||||
-- Fail if option is specified twice
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor=30, fillfactor=40);
|
||||
|
||||
-- Specifying name only for a non-Boolean option should fail
|
||||
CREATE TABLE reloptions_test2(i INT) WITH (fillfactor);
|
||||
|
||||
-- Simple ALTER TABLE
|
||||
ALTER TABLE reloptions_test SET (fillfactor=31,
|
||||
autovacuum_analyze_scale_factor = 0.3);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
|
||||
-- Set boolean option to true without specifying value
|
||||
ALTER TABLE reloptions_test SET (autovacuum_enabled, fillfactor=32);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
|
||||
-- Check that RESET works well
|
||||
ALTER TABLE reloptions_test RESET (fillfactor);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
|
||||
-- Resetting all values causes the column to become null
|
||||
ALTER TABLE reloptions_test RESET (autovacuum_enabled,
|
||||
autovacuum_analyze_scale_factor);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass AND
|
||||
reloptions IS NULL;
|
||||
|
||||
-- RESET fails if a value is specified
|
||||
ALTER TABLE reloptions_test RESET (fillfactor=12);
|
||||
|
||||
-- The OIDS option is not stored
|
||||
DROP TABLE reloptions_test;
|
||||
CREATE TABLE reloptions_test(i INT) WITH (fillfactor=20, oids=true);
|
||||
SELECT reloptions, relhasoids FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
|
||||
-- Test toast.* options
|
||||
DROP TABLE reloptions_test;
|
||||
|
||||
CREATE TABLE reloptions_test (s VARCHAR)
|
||||
WITH (toast.autovacuum_vacuum_cost_delay = 23);
|
||||
SELECT reltoastrelid as toast_oid
|
||||
FROM pg_class WHERE oid = 'reloptions_test'::regclass \gset
|
||||
SELECT reloptions FROM pg_class WHERE oid = :toast_oid;
|
||||
|
||||
ALTER TABLE reloptions_test SET (toast.autovacuum_vacuum_cost_delay = 24);
|
||||
SELECT reloptions FROM pg_class WHERE oid = :toast_oid;
|
||||
|
||||
ALTER TABLE reloptions_test RESET (toast.autovacuum_vacuum_cost_delay);
|
||||
SELECT reloptions FROM pg_class WHERE oid = :toast_oid;
|
||||
|
||||
-- Fail on non-existent options in toast namespace
|
||||
CREATE TABLE reloptions_test2 (i int) WITH (toast.not_existing_option = 42);
|
||||
|
||||
-- Mix TOAST & heap
|
||||
DROP TABLE reloptions_test;
|
||||
|
||||
CREATE TABLE reloptions_test (s VARCHAR) WITH
|
||||
(toast.autovacuum_vacuum_cost_delay = 23,
|
||||
autovacuum_vacuum_cost_delay = 24, fillfactor = 40);
|
||||
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test'::regclass;
|
||||
SELECT reloptions FROM pg_class WHERE oid = (
|
||||
SELECT reltoastrelid FROM pg_class WHERE oid = 'reloptions_test'::regclass);
|
||||
|
||||
--
|
||||
-- CREATE INDEX, ALTER INDEX for btrees
|
||||
--
|
||||
|
||||
CREATE INDEX reloptions_test_idx ON reloptions_test (s) WITH (fillfactor=30);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test_idx'::regclass;
|
||||
|
||||
-- Fail when option and namespace do not exist
|
||||
CREATE INDEX reloptions_test_idx ON reloptions_test (s)
|
||||
WITH (not_existing_option=2);
|
||||
CREATE INDEX reloptions_test_idx ON reloptions_test (s)
|
||||
WITH (not_existing_ns.fillfactor=2);
|
||||
|
||||
-- Check allowed ranges
|
||||
CREATE INDEX reloptions_test_idx2 ON reloptions_test (s) WITH (fillfactor=1);
|
||||
CREATE INDEX reloptions_test_idx2 ON reloptions_test (s) WITH (fillfactor=130);
|
||||
|
||||
-- Check ALTER
|
||||
ALTER INDEX reloptions_test_idx SET (fillfactor=40);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test_idx'::regclass;
|
||||
|
||||
-- Check ALTER on empty reloption list
|
||||
CREATE INDEX reloptions_test_idx3 ON reloptions_test (s);
|
||||
ALTER INDEX reloptions_test_idx3 SET (fillfactor=40);
|
||||
SELECT reloptions FROM pg_class WHERE oid = 'reloptions_test_idx3'::regclass;
|
@ -5,7 +5,7 @@
|
||||
-- testing SP-GiST code itself.
|
||||
|
||||
create table spgist_point_tbl(id int4, p point);
|
||||
create index spgist_point_idx on spgist_point_tbl using spgist(p);
|
||||
create index spgist_point_idx on spgist_point_tbl using spgist(p) with (fillfactor = 75);
|
||||
|
||||
-- Test vacuum-root operation. It gets invoked when the root is also a leaf,
|
||||
-- i.e. the index is very small.
|
||||
@ -48,3 +48,11 @@ select g, 'baaaaaaaaaaaaaar' || g from generate_series(1, 1000) g;
|
||||
-- tuple to be moved to another page.
|
||||
insert into spgist_text_tbl (id, t)
|
||||
select -g, 'f' || repeat('o', 100-g) || 'surprise' from generate_series(1, 100) g;
|
||||
|
||||
-- Test out-of-range fillfactor values
|
||||
create index spgist_point_idx2 on spgist_point_tbl using spgist(p) with (fillfactor = 9);
|
||||
create index spgist_point_idx2 on spgist_point_tbl using spgist(p) with (fillfactor = 101);
|
||||
|
||||
-- Modify fillfactor in existing index
|
||||
alter index spgist_point_idx set (fillfactor = 90);
|
||||
reindex index spgist_point_idx;
|
||||
|
Loading…
x
Reference in New Issue
Block a user