I've found file /usr/lib64/monetdb5/createdb/20_vacuum.sql with this functions:
-- Vacuum a relational table should be done with care. -- For, the oid's are used in join-indices.
-- Vacuum of tables may improve IO performance and disk footprint. -- The foreign key constraints should be dropped before -- and re-established after the cluster operation.
create procedure shrink(sys string, tab string) external name sql.shrink;
create procedure reuse(sys string, tab string) external name sql.reuse;
create procedure vacuum(sys string, tab string) external name sql.vacuum;
Which approach is used in above vacuum procedure?
I tried to use it:
sql>delete from sys.transfer_ip ; 651950 affected rows (117.620ms) sql>call vacuum('sys','transfer_ip'); sql>select vacuum('sys','transfer_ip'); MAPI = (monetdb) /tmp/.s.monetdb.50000 ACTION= read_line QUERY = select vacuum('sys','transfer_ip'); ERROR = !Connection terminated
Database size was the same.
-- Thanks, Eugene Prokopiev