-- -- recently-dropped table --
\set VERBOSITY sqlstate
BEGIN; CREATETABLE droppedtest (c int); SELECT'droppedtest'::regclass::oid AS oid \gset
SAVEPOINT q; DROPTABLE droppedtest; RELEASE q;
SAVEPOINT q; SELECT * FROM pg_visibility_map(:oid); ROLLBACK TO q; -- ERROR: could not open relation with OID 16xxx
SAVEPOINT q; SELECT1; ROLLBACK TO q;
SAVEPOINT q; SELECT1; ROLLBACK TO q; SELECT pg_relation_size(:oid), pg_relation_filepath(:oid),
has_table_privilege(:oid, 'SELECT'); SELECT * FROM pg_visibility_map(:oid); -- ERROR: could not open relation with OID 16xxx
ROLLBACK;
\set VERBOSITY default
-- -- check that using the module's functions with unsupported relations will fail --
-- partitioned tables (the parent ones) don't have visibility maps createtable test_partitioned (a int) partition by list (a); -- these should all fail select pg_visibility('test_partitioned', 0); select pg_visibility_map('test_partitioned'); select pg_visibility_map_summary('test_partitioned'); select pg_check_frozen('test_partitioned'); select pg_truncate_visibility_map('test_partitioned');
createtable test_partition partition of test_partitioned forvaluesin (1); createindex test_index on test_partition (a); -- indexes do not, so these all fail select pg_visibility('test_index', 0); select pg_visibility_map('test_index'); select pg_visibility_map_summary('test_index'); select pg_check_frozen('test_index'); select pg_truncate_visibility_map('test_index');
create view test_view asselect1; -- views do not have VMs, so these all fail select pg_visibility('test_view', 0); select pg_visibility_map('test_view'); select pg_visibility_map_summary('test_view'); select pg_check_frozen('test_view'); select pg_truncate_visibility_map('test_view');
create sequence test_sequence; -- sequences do not have VMs, so these all fail select pg_visibility('test_sequence', 0); select pg_visibility_map('test_sequence'); select pg_visibility_map_summary('test_sequence'); select pg_check_frozen('test_sequence'); select pg_truncate_visibility_map('test_sequence');
createforeign data wrapper dummy; create server dummy_server foreign data wrapper dummy; createforeigntable test_foreign_table () server dummy_server; -- foreign tables do not have VMs, so these all fail select pg_visibility('test_foreign_table', 0); select pg_visibility_map('test_foreign_table'); select pg_visibility_map_summary('test_foreign_table'); select pg_check_frozen('test_foreign_table'); select pg_truncate_visibility_map('test_foreign_table');
-- check some of the allowed relkinds createtable regular_table (a int, b text); altertable regular_table altercolumn b set storage external; insertinto regular_table values (1, repeat('one', 1000)), (2, repeat('two', 1000));
vacuum (disable_page_skipping) regular_table; select count(*) > 0from pg_visibility('regular_table'); select count(*) > 0from pg_visibility((select reltoastrelid from pg_class where relname = 'regular_table'));
truncate regular_table; select count(*) > 0from pg_visibility('regular_table'); select count(*) > 0from pg_visibility((select reltoastrelid from pg_class where relname = 'regular_table'));
-- regular tables which are part of a partition *do* have visibility maps insertinto test_partition values (1);
vacuum (disable_page_skipping) test_partition; select count(*) > 0from pg_visibility('test_partition', 0); select count(*) > 0from pg_visibility_map('test_partition'); select count(*) > 0from pg_visibility_map_summary('test_partition'); select * from pg_check_frozen('test_partition'); -- hopefully none select pg_truncate_visibility_map('test_partition');
-- test copy freeze createtable copyfreeze (a int, b char(1500));
-- load all rows via COPY FREEZE and ensure that all pages are set all-visible -- and all-frozen.
begin;
truncate copyfreeze;
copy copyfreeze from stdin freeze; 1'1' 2'2' 3'3' 4'4' 5'5' 6'6'
\. commit; select * from pg_visibility_map('copyfreeze'); select * from pg_check_frozen('copyfreeze');
-- load half the rows via regular COPY and rest via COPY FREEZE. The pages -- which are touched by regular COPY must not be set all-visible/all-frozen. On -- the other hand, pages allocated by COPY FREEZE should be marked -- all-frozen/all-visible.
begin;
truncate copyfreeze;
copy copyfreeze from stdin; 1'1' 2'2' 3'3' 4'4' 5'5' 6'6'
\.
copy copyfreeze from stdin freeze; 7'7' 8'8' 9'9' 10'10' 11'11' 12'12'
\. commit; select * from pg_visibility_map('copyfreeze'); select * from pg_check_frozen('copyfreeze');
-- Try a mix of regular COPY and COPY FREEZE.
begin;
truncate copyfreeze;
copy copyfreeze from stdin freeze; 1'1' 2'2' 3'3' 4'4' 5'5'
\.
copy copyfreeze from stdin; 6'6'
\.
copy copyfreeze from stdin freeze; 7'7' 8'8' 9'9' 10'10' 11'11' 12'12'
\. commit; select * from pg_visibility_map('copyfreeze'); select * from pg_check_frozen('copyfreeze');
-- cleanup droptable test_partitioned; drop view test_view; drop sequence test_sequence; dropforeigntable test_foreign_table; drop server dummy_server; dropforeign data wrapper dummy; drop materialized view matview_visibility_test; droptable regular_table; droptable copyfreeze;
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.2 Sekunden
(vorverarbeitet am 2026-08-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.