Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/contrib/pg_surgery/expected/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 4 kB image not shown  

Quelle  heap_surgery.out   Sprache: unbekannt

 
Spracherkennung für: .out vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

create extension pg_surgery;
-- create a normal heap table and insert some rows.
-- use a temp table so that vacuum behavior doesn't depend on global xmin
create temp table htab (a int);
insert into htab values (100), (200), (300), (400), (500);
-- test empty TID array
select heap_force_freeze('htab'::regclass, ARRAY[]::tid[]);
 heap_force_freeze 
-------------------
 
(1 row)

-- nothing should be frozen yet
select * from htab where xmin = 2;
 a 
---
(0 rows)

-- freeze forcibly
select heap_force_freeze('htab'::regclass, ARRAY['(04)']::tid[]);
 heap_force_freeze 
-------------------
 
(1 row)

-- now we should have one frozen tuple
select ctid, xmax from htab where xmin = 2;
 ctid  | xmax 
-------+------
 (0,4) |    0
(1 row)

-- kill forcibly
select heap_force_kill('htab'::regclass, ARRAY['(04)']::tid[]);
 heap_force_kill 
-----------------
 
(1 row)

-- should be gone now
select * from htab where ctid = '(04)';
 a 
---
(0 rows)

-- should now be skipped because it's already dead
select heap_force_kill('htab'::regclass, ARRAY['(04)']::tid[]);
NOTICE:  skipping tid (04) for relation "htab" because it is marked dead
 heap_force_kill 
-----------------
 
(1 row)

select heap_force_freeze('htab'::regclass, ARRAY['(04)']::tid[]);
NOTICE:  skipping tid (04) for relation "htab" because it is marked dead
 heap_force_freeze 
-------------------
 
(1 row)

-- freeze two TIDs at once while skipping an out-of-range block number
select heap_force_freeze('htab'::regclass,
       ARRAY['(01)', '(03)', '(11)']::tid[]);
NOTICE:  skipping block 1 for relation "htab" because the block number is out of range
 heap_force_freeze 
-------------------
 
(1 row)

-- we should now have two frozen tuples
select ctid, xmax from htab where xmin = 2;
 ctid  | xmax 
-------+------
 (0,1) |    0
 (0,3) |    0
(2 rows)

-- out-of-range TIDs should be skipped
select heap_force_freeze('htab'::regclass, ARRAY['(00)', '(06)']::tid[]);
NOTICE:  skipping tid (00) for relation "htab" because the item number is out of range
NOTICE:  skipping tid (06) for relation "htab" because the item number is out of range
 heap_force_freeze 
-------------------
 
(1 row)

-- set up a new table with a redirected line pointer
-- use a temp table so that vacuum behavior doesn't depend on global xmin
create temp table htab2(a int);
insert into htab2 values (100);
update htab2 set a = 200;
vacuum htab2;
-- redirected TIDs should be skipped
select heap_force_kill('htab2'::regclass, ARRAY['(01)']::tid[]);
NOTICE:  skipping tid (01) for relation "htab2" because it redirects to item 2
 heap_force_kill 
-----------------
 
(1 row)

-- now create an unused line pointer
select ctid from htab2;
 ctid  
-------
 (0,2)
(1 row)

update htab2 set a = 300;
select ctid from htab2;
 ctid  
-------
 (0,3)
(1 row)

vacuum freeze htab2;
-- unused TIDs should be skipped
select heap_force_kill('htab2'::regclass, ARRAY['(02)']::tid[]);
NOTICE:  skipping tid (02) for relation "htab2" because it is marked unused
 heap_force_kill 
-----------------
 
(1 row)

-- multidimensional TID array should be rejected
select heap_force_kill('htab2'::regclass, ARRAY[['(02)']]::tid[]);
ERROR:  argument must be empty or one-dimensional array
-- TID array with nulls should be rejected
select heap_force_kill('htab2'::regclass, ARRAY[NULL]::tid[]);
ERROR:  array must not contain nulls
-- but we should be able to kill the one tuple we have
select heap_force_kill('htab2'::regclass, ARRAY['(03)']::tid[]);
 heap_force_kill 
-----------------
 
(1 row)

-- materialized view.
-- note that we don't commit the transaction, so autovacuum can't interfere.
begin;
create materialized view mvw as select a from generate_series(13) a;
select * from mvw where xmin = 2;
 a 
---
(0 rows)

select heap_force_freeze('mvw'::regclass, ARRAY['(03)']::tid[]);
 heap_force_freeze 
-------------------
 
(1 row)

select * from mvw where xmin = 2;
 a 
---
 3
(1 row)

select heap_force_kill('mvw'::regclass, ARRAY['(03)']::tid[]);
 heap_force_kill 
-----------------
 
(1 row)

select * from mvw where ctid = '(03)';
 a 
---
(0 rows)

rollback;
-- check that it fails on an unsupported relkind
create view vw as select 1;
select heap_force_kill('vw'::regclass, ARRAY['(01)']::tid[]);
ERROR:  cannot operate on relation "vw"
DETAIL:  This operation is not supported for views.
select heap_force_freeze('vw'::regclass, ARRAY['(01)']::tid[]);
ERROR:  cannot operate on relation "vw"
DETAIL:  This operation is not supported for views.
-- cleanup.
drop view vw;
drop extension pg_surgery;

[Dauer der Verarbeitung: 0.14 Sekunden, vorverarbeitet 2026-08-08]