|
| 1 | +CREATE EXTENSION pg_freespacemap; |
| 2 | +CREATE TABLE freespace_tab (c1 int) WITH (autovacuum_enabled = off); |
| 3 | +CREATE INDEX freespace_brin ON freespace_tab USING brin (c1); |
| 4 | +CREATE INDEX freespace_btree ON freespace_tab USING btree (c1); |
| 5 | +CREATE INDEX freespace_hash ON freespace_tab USING hash (c1); |
| 6 | +-- report all the sizes of the FSMs for all the relation blocks. |
| 7 | +WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace') |
| 8 | + SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail |
| 9 | + FROM rel, LATERAL pg_freespace(rel.id) AS fsm |
| 10 | + ORDER BY 1, 2; |
| 11 | + id | blkno | is_avail |
| 12 | +-----------------+-------+---------- |
| 13 | + freespace_brin | 0 | f |
| 14 | + freespace_brin | 1 | f |
| 15 | + freespace_brin | 2 | t |
| 16 | + freespace_btree | 0 | f |
| 17 | + freespace_hash | 0 | f |
| 18 | + freespace_hash | 1 | f |
| 19 | + freespace_hash | 2 | f |
| 20 | + freespace_hash | 3 | f |
| 21 | + freespace_hash | 4 | f |
| 22 | + freespace_hash | 5 | f |
| 23 | + freespace_hash | 6 | f |
| 24 | + freespace_hash | 7 | f |
| 25 | + freespace_hash | 8 | f |
| 26 | + freespace_hash | 9 | f |
| 27 | +(14 rows) |
| 28 | + |
| 29 | +INSERT INTO freespace_tab VALUES (1); |
| 30 | +VACUUM freespace_tab; |
| 31 | +WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace') |
| 32 | + SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail |
| 33 | + FROM rel, LATERAL pg_freespace(rel.id) AS fsm |
| 34 | + ORDER BY 1, 2; |
| 35 | + id | blkno | is_avail |
| 36 | +-----------------+-------+---------- |
| 37 | + freespace_tab | 0 | t |
| 38 | + freespace_brin | 0 | f |
| 39 | + freespace_brin | 1 | f |
| 40 | + freespace_brin | 2 | t |
| 41 | + freespace_btree | 0 | f |
| 42 | + freespace_btree | 1 | f |
| 43 | + freespace_hash | 0 | f |
| 44 | + freespace_hash | 1 | f |
| 45 | + freespace_hash | 2 | f |
| 46 | + freespace_hash | 3 | f |
| 47 | + freespace_hash | 4 | f |
| 48 | + freespace_hash | 5 | f |
| 49 | + freespace_hash | 6 | f |
| 50 | + freespace_hash | 7 | f |
| 51 | + freespace_hash | 8 | f |
| 52 | + freespace_hash | 9 | f |
| 53 | +(16 rows) |
| 54 | + |
| 55 | +DELETE FROM freespace_tab; |
| 56 | +VACUUM freespace_tab; |
| 57 | +WITH rel AS (SELECT oid::regclass AS id FROM pg_class WHERE relname ~ 'freespace') |
| 58 | + SELECT rel.id, fsm.blkno, (fsm.avail > 0) AS is_avail |
| 59 | + FROM rel, LATERAL pg_freespace(rel.id) AS fsm |
| 60 | + ORDER BY 1, 2; |
| 61 | + id | blkno | is_avail |
| 62 | +-----------------+-------+---------- |
| 63 | + freespace_brin | 0 | f |
| 64 | + freespace_brin | 1 | f |
| 65 | + freespace_brin | 2 | t |
| 66 | + freespace_btree | 0 | f |
| 67 | + freespace_btree | 1 | f |
| 68 | + freespace_hash | 0 | f |
| 69 | + freespace_hash | 1 | f |
| 70 | + freespace_hash | 2 | f |
| 71 | + freespace_hash | 3 | f |
| 72 | + freespace_hash | 4 | f |
| 73 | + freespace_hash | 5 | f |
| 74 | + freespace_hash | 6 | f |
| 75 | + freespace_hash | 7 | f |
| 76 | + freespace_hash | 8 | f |
| 77 | + freespace_hash | 9 | f |
| 78 | +(15 rows) |
| 79 | + |
| 80 | +-- failures with incorrect block number |
| 81 | +SELECT * FROM pg_freespace('freespace_tab', -1); |
| 82 | +ERROR: invalid block number |
| 83 | +SELECT * FROM pg_freespace('freespace_tab', 4294967295); |
| 84 | +ERROR: invalid block number |
| 85 | +DROP TABLE freespace_tab; |
0 commit comments