mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-06 04:52:55 +00:00
47 lines
1.5 KiB
SQL
47 lines
1.5 KiB
SQL
--
|
|
-- Test that when a relation is truncated by VACUUM, the next smgrnblocks()
|
|
-- query to get the relation's size returns the new size.
|
|
-- (This isn't related to the TRUNCATE command, which works differently,
|
|
-- by creating a new relation file)
|
|
--
|
|
CREATE TABLE truncatetest (i int);
|
|
INSERT INTO truncatetest SELECT g FROM generate_series(1, 10000) g;
|
|
|
|
-- Remove all the rows, and run VACUUM to remove the dead tuples and
|
|
-- truncate the physical relation to 0 blocks.
|
|
DELETE FROM truncatetest;
|
|
VACUUM truncatetest;
|
|
|
|
-- Check that a SeqScan sees correct relation size (which is now 0)
|
|
SELECT * FROM truncatetest;
|
|
|
|
DROP TABLE truncatetest;
|
|
|
|
|
|
--
|
|
-- Test that the FSM is truncated along with the table.
|
|
--
|
|
|
|
-- Create a test table and delete and vacuum away most of the rows.
|
|
-- This leaves the FSM full of pages with plenty of space
|
|
create table tt(i int);
|
|
insert into tt select g from generate_series(1, 100000) g;
|
|
delete from tt where i%100 != 0 and i > 10000;
|
|
vacuum freeze tt;
|
|
|
|
-- Delete the rest of the rows, and vacuum again. This truncates the
|
|
-- heap to 0 blocks, and should also truncate the FSM.
|
|
delete from tt;
|
|
vacuum tt;
|
|
|
|
-- This can be used to look at the FSM directly, if the 'pg_freespace' contrib module
|
|
-- is installed
|
|
--SELECT blkno, avail from generate_series(1, 450) blkno, pg_freespace('tt'::regclass, blkno) AS avail;
|
|
|
|
-- Insert a row again. It should go on block #0. If the FSM was not truncated,
|
|
-- the insertion would find a higher-numbered block in the FSM and use that instead.
|
|
insert into tt values (0);
|
|
select ctid, * from tt;
|
|
|
|
drop table tt;
|