postgresql/src/test/regress/sql/fsm.sql

42 lines
1 KiB
MySQL
Raw Normal View History

--
-- Free Space Map test
--
CREATE TABLE fsm_check_size (num int, str text);
-- With one block, there should be no FSM
INSERT INTO fsm_check_size VALUES(1, 'a');
VACUUM fsm_check_size;
SELECT pg_relation_size('fsm_check_size', 'main') AS heap_size,
pg_relation_size('fsm_check_size', 'fsm') AS fsm_size;
-- Extend table with enough blocks to exceed the FSM threshold
DO $$
DECLARE curtid tid;
num int;
BEGIN
num = 11;
LOOP
INSERT INTO fsm_check_size VALUES (num, 'b') RETURNING ctid INTO curtid;
EXIT WHEN curtid >= tid '(4, 0)';
num = num + 1;
END LOOP;
END;
$$;
VACUUM fsm_check_size;
SELECT pg_relation_size('fsm_check_size', 'fsm') AS fsm_size;
-- Add long random string to extend TOAST table to 1 block
INSERT INTO fsm_check_size
VALUES(0, (SELECT string_agg(md5(chr(i)), '')
FROM generate_series(1,100) i));
VACUUM fsm_check_size;
SELECT pg_relation_size(reltoastrelid, 'main') AS toast_size,
pg_relation_size(reltoastrelid, 'fsm') AS toast_fsm_size
FROM pg_class WHERE relname = 'fsm_check_size';
DROP TABLE fsm_check_size;